我曾认为变量赋值是在sess.run执行列表中的所有操作之后进行的,但以下代码在不同的执行中返回不同的结果。它似乎随意运行列表中的操作,并在列表中的操作运行后分配变量。
a = tf.Variable(0)
b = tf.Variable(1)
c = tf.Variable(1)
update_a = tf.assign(a, b + c)
update_b = tf.assign(b, c + a)
update_c = tf.assign(c, a + b)
with tf.Session() as sess:
sess.run(initialize_all_variables)
for i in range(5):
a_, b_, c_ = sess.run([update_a, update_b, update_c])
我想了解变量赋值的时间安排。哪个是正确的:“update_x->assign x->...->udpate_z->assign z”或“update_x->udpate_y->udpate_z->assign a,b,c”?(其中(x,y,z)是(a,b,c)的排列) 此外,如果有一种方法能够实现后者的赋值(在列表中所有操作完成后进行赋值),请告诉我如何实现。
tf.control_dependencies
)? - Sarahsess.run([x, y, z])
时,TensorFlow 只会执行那些张量所依赖的操作一次(除非在你的图中有一个tf.while_loop()
)。如果一个张量在列表中出现两次(比如你的例子中的mul
),TensorFlow 将只执行一次并返回两个结果副本。要多次运行赋值,你必须要么多次调用sess.run()
,要么使用tf.while_loop()
在你的图中添加一个循环。 - mrrysess.run(list)
的行为。非常感谢你们! - Sarah