问题描述
tf.group()
按顺序执行?
Are the operations in tf.group()
executed in order?
如果它们不是按顺序执行的,有没有类似的操作让它们按顺序运行?或者有没有一种干净的方式来按顺序运行它们?
If they are not executed in order, is there a similar operation that makes them run in order? Or is there a clean way to run them in order?
我的目标是反复多次运行操作 A 和 B,即
My aim is to run operations A and B many times over and over again, i.e.
sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
...
推荐答案
操作不一定按顺序执行.
The operations do not necessarily execute in order.
以下是证明这一点的测试:
Here is a test that proves this:
import tensorflow as tf
sess = tf.InteractiveSession()
a = tf.Variable(1.0)
b = tf.Variable(10.0)
c = tf.Variable(0.0)
grp = tf.group(tf.assign(c, a), tf.assign(c, b)) # this is the group op
for i in range(100):
sess.run(tf.global_variables_initializer()) # initialize c each time
sess.run(grp) # run the group op
print(sess.run(c)) # observe results
当我在 cpu 上运行它时,我发现一些迭代产生 1.0
和一些 10.0
.
When I run this on a cpu, I get that some iterations produce 1.0
and some 10.0
.
tf.group
不要求操作在同一台设备上,这意味着它们不能按照命令执行.
tf.group
does not require the operations to be on the same device, which means that they could not be expected to follow an order.
如果您希望操作按顺序执行,请确保使用 构建它们control_dependencies
If you want the operations to execute in order, make sure to build them with control_dependencies
import tensorflow as tf
sess = tf.InteractiveSession()
a = tf.Variable(1.0)
b = tf.Variable(10.0)
c = tf.Variable(0.0)
op1 = tf.assign(c, a)
with tf.get_default_graph().control_dependencies([op1]):
op2 = tf.assign(c, b) # op2 will execute only after op1
grp = tf.group(op1,op2)
for i in range(100):
sess.run(tf.global_variables_initializer())
sess.run(grp)
print(sess.run(c))
这篇关于tf.group 中的操作是否按顺序执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!