tf.group对GAN的行为

时间:2017-12-13 16:14:06

标签: 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)

这是否相同,或者运行分组操作是否存在根本不同的事情,而不是连续运行多个单个操作?

1 个答案:

答案 0 :(得分:3)

我通常使用tf.control_dependencies。我认为分组也可以工作,但这将是鉴别器和发生器的并行更新。在传统的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)