Tensorflow 甘斯的tf.group行为

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) 这是等效的,还是运行分组操作

通常,通过交替训练鉴别器和生成器来训练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)

这是等效的,还是运行分组操作与连续运行多个单个操作有本质区别?

我通常使用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)