2017-05-08 45 views

回答

3

编号默认情况下,Tensorflow可以按任意顺序评估操作员。由于并发性,该顺序甚至可能在运行之间发生变化。这通常是件好事,因为这意味着Tensorflow可能会优化使用可用的硬件。如果你的代码改变诸如Variables之类的状态,这可能会有问题。

但是,如果由于某种原因您希望控制评估顺序,通常您可以使用控制依赖关系来强制执行操作符之间的顺序。控制依赖关系记录在这里:

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

希望帮助!

+0

这看起来像它可能会在链接的问题中有用:http://stackoverflow.com/questions/43856480/is-it-possible-to-get-the-objective-function-value-during-each-training - 步骤我不知道你是否有兴趣,但那里有100点的赏金。 – MaxB

0

发布之后,并在讨论中

Is it possible to get the objective function value during each training step?

我注意到,执行顺序是不确定的。例如,考虑这样的代码:

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] 

不幸的是,我没有看到任何文档中指定的执行顺序或警告用户,它是不确定的。

相关问题