Tensorflow 甘斯的tf.group行为
通常,通过交替训练鉴别器和生成器来训练GAN,即:Tensorflow 甘斯的tf.group行为,tensorflow,Tensorflow,通常,通过交替训练鉴别器和生成器来训练GAN,即: for i in range(num_steps): sess.run(minimize_loss_D) sess.run(minimize_loss_G) 我很好奇是否可以使用tf.group实现相同的行为,即: op = tf.group(minimize_loss_D, minimize_loss_G) for i in range(num_steps): sess.run(op) 这是等效的,还是运行分组操作
for i in range(num_steps):
sess.run(minimize_loss_D)
sess.run(minimize_loss_G)
我很好奇是否可以使用tf.group实现相同的行为,即:
op = tf.group(minimize_loss_D, minimize_loss_G)
for i in range(num_steps):
sess.run(op)
这是等效的,还是运行分组操作与连续运行多个单个操作有本质区别?我通常使用tf.control\u依赖项。我认为分组也可以工作,但这将是鉴别器和生成器的并行更新。在经典的GAN架构中,您可以按顺序而不是并行地进行更新。至少从理论的角度来看,重要的是每一个都要按顺序更新。此外,通过使用控件依赖项,可以显著减少backprop所需的内存量。如果Tensorflow试图并行执行这两个操作,则需要为这两个操作存储渐变。同样在实践中,使用控件依赖关系相当快,应该比运行两个会话更快 我通常这样构造更新:
with tf.name_scope('optimize'):
g_min = opt.minimize(model.g_loss, var_list=model.g_vars, name='g_op')
with tf.control_dependencies([g_min]):
d_min = opt.minimize(model.d_loss, var_list=model.d_vars, name='d_op')
train_op = d_min
#sess.run(train_op)