tf.group中的操作是按顺序执行的吗?

Gin*_*ger 4 tensorflow

操作是tf.group()按顺序执行的吗?

如果它们没有按顺序执行,是否有类似的操作使它们按顺序运行?或者有一个干净的方式来按顺序运行它们?

我的目标是一次又一次地运行操作A和B,即

sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
sess.run(A)
sess.run(B)
...
Run Code Online (Sandbox Code Playgroud)

Lio*_*ior 10

操作不一定按顺序执行.

这是一个证明这一点的测试:

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
Run Code Online (Sandbox Code Playgroud)

当我在cpu上运行它时,我会得到一些迭代产生1.0和一些10.0.

tf.group 不要求操作在同一设备上,这意味着他们不能按照订单进行操作.

如果您希望操作按顺序执行,请确保使用它们构建它们 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))
Run Code Online (Sandbox Code Playgroud)