首页 > 解决方案 > 张量流的会话运行张量列表的顺序是什么?

问题描述

查看代码片段:

import tensorflow as tf

x = tf.Variable(1)
op = tf.assign(x, x + 1)

with tf.Session() as sess:
  tf.global_variables_initializer().run()
  print(sess.run([x, op]))

有两种可能的结果:

它们取决于评估的顺序,对于第一种情况,x在 之前评估op,对于第二种情况,x在之后评估op

我已经多次运行代码,但结果始终是x=2 and op=2. 所以我想tensorflow可以保证x在评估之后op。这样对吗?以及如何tensorflow保证依赖?

更新

对于上述情况,结果是确定的。但在以下情况下,结果是不确定的。

import tensorflow as tf

x = tf.Variable(1)
op = tf.assign(x, x + 1)
x = x + 0                   # add this line

with tf.Session() as sess:
  tf.global_variables_initializer().run()
  for i in range(5):
    print(sess.run([x, op]))

在第一个代码中,xisVariableop取决于x,所以x总是在 之后评估op。但在第二种情况下,x变为Tensor,并op取决于Variable x(之后x = x + 0,x 被覆盖)。所以op不依赖于Tensor x.

标签: pythontensorflow

解决方案


评估张量的顺序是未定义的。请参阅API 文档(在“返回”信息中​​的最底部Session.run())。因此,您不应依赖它们以特定顺序执行。如果您需要保证订单,您可能应该run对不同的张量/操作使用单独的调用。


推荐阅读