Session.run(fetches)是否保证按顺序执行其“fetches”参数?

8

Session.run(fetches, feed_dict)保证按顺序执行其fetches参数吗?

文档似乎没有提到。

例如,如果运行以下代码:

sess.run([accuracy, train_op], feed_dict=feed_dict)

执行顺序很重要:train_op会更新影响accuracy的参数。
2个回答

10
默认情况下,Tensorflow可以自由地评估运算符的顺序。由于并发性,这个顺序甚至可能在运行之间改变。通常情况下,这是一个好事情,因为它意味着Tensorflow可以最优化地利用可用的硬件。但是,如果您的代码会改变状态,比如变量,那么这可能会有问题。
然而,如果出于某种原因您确实希望控制评估的顺序,一般来说,您可以使用控制依赖关系来强制运算符之间的顺序。控制依赖关系的文档可以在这里找到:

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

希望有所帮助!

这看起来可能在链接的问题中有用:https://dev59.com/QKHia4cB1Zd3GeqPVZGw 我不知道你是否感兴趣,但那里有100分的悬赏。 - MWB
此外,为了达到这个目的,使用资源变量可能会很有用。 - figs_and_nuts

1

在发帖后,并在每个训练步骤中是否有可能获得目标函数值?的讨论期间,我注意到执行顺序是未定义的。例如,请考虑以下代码:

import tensorflow as tf
x = tf.Variable(0, dtype=tf.float32)
loss = tf.nn.l2_loss(x-1)
train_opt = tf.train.GradientDescentOptimizer(1)
train_op = train_opt.minimize(loss)
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    print sess.run([x, train_op])

使用TensorFlow 1.1,如果将环境变量CUDA_VISIBLE_DEVICES设置为其中一个GPU,则会打印出以下内容:

[0.0, None]

如果设置为"",则此代码会打印。
[1.0, None]

很遗憾,文档中没有说明执行顺序或警告用户它是未定义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接