我正在研究一种生成对抗模型,在该模型中,我必须在一张图中的两个目标变量上依次最小化两个目标函数。为了说明这个问题,我将代码简化为以下代码:
a = tf.Variable(1.0)
b = tf.Variable(2.0)
f_a = a*a*b
f_b = a*b*b
opt_a = tf.train.GradientDescentOptimizer(learning_rate=0.1)
opt_b = tf.train.GradientDescentOptimizer(learning_rate=0.1)
op_a = opt_a.minimize(loss=f_a, var_list=[a])
with tf.control_dependencies([op_a]):
op_b = opt_b.minimize(loss=f_b, var_list=[b])
session.run(tf.global_variables_initializer())
# session.run([a, b]) results in [1.0, 2.0]
session.run(op_b)
# session.run([a, b]) results in [0.6, 1.68] but not [0.6, 1.76]
预期的行为是,首先更新变量“ a”,然后更新变量“ b”,如下所示:
是错误还是我错过了什么?