在 Tensorflow 中使用 tf.assign 时的竞争条件

Race condition when using tf.assign in Tensorflow

使用 tf.assign() 时如何处理竞争条件? 例如,如果我的代码如下:

y = tf.Variable(6,trainable=False,name='y');
x = tf.Variable(0,trainable=False,name='x');
assign_op = tf.assign( x, 2 );
divide_op = y/assign_op;
answer = sess.run([divide_op]); 

我的答案是 3 或 0inf..我唯一能想到的就是将 sess.run 拆分为:

_ = sess.run([assign_op]);
answer = sess.run([divide_op]);

我认为像上面那样创建操作依赖项可以解决存在竞争条件的问题,但事实并非如此。有人知道该怎么办吗?

您想查看 control_dependencies 流量控制函数:

https://www.tensorflow.org/api_docs/python/tf/Graph#control_dependencies

with tf.control_dependencies([assign_op]):
    divide_op = y/assign_op

这将确保 "assign_op" 在块中的图形元素之前完成。