我基本上有一个带有A
操作的计算图,如下所示:
|
o
|
A
|
o
|
我希望在张量流过B
(在这种情况下是变量赋值)时调用额外的计算A
:
|
o
/ \
A B
\ /
o
|
似乎元组允许这样做,但我想知道这是否是最好的方法:
import tensorflow as tf
sess = tf.Session()
v = tf.Variable(0)
sess.run(tf.initialize_all_variables())
A = tf.constant(1)
A, _ = tf.tuple([A, v.assign(2)])
print(sess.run(A)) # prints 1
print(sess.run(v)) # prints 2
所有这些都在分层计算的上下文中,其中层权重和其他变量在前向激活通过它们时得到更新。另一种方法可能是在fwd_update_ops
列表中累积这些更新,最后调用sess.run([fwd_update_ops, bwd_update_ops], feed_dict)
。还有其他选择吗?这样做的最佳方式是什么?
答案 0 :(得分:1)
来自@YaroslavBulatov的评论:
您应该使用tf.control_dependencies([...])
。
例如,要使操作update_op
依赖于res = tf.square(A)
,您可以写:
v = tf.Variable(0, name='v')
A = tf.constant(3, name='A')
update_op = v.assign(2)
with tf.control_dependencies([update_op]):
res = tf.square(A, name='square')
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print(sess.run(res)) # prints 9
print(sess.run(v)) # prints 2, because v got updated
在执行方面,操作tf.square(A)
将等待,直到执行update_op
。
|
o
|
A update_op
| /
square
|