python - 张量流的会话运行张量列表的顺序是什么?
问题描述
查看代码片段:
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=1 和 op=2
- x=2 和 op=2
它们取决于评估的顺序,对于第一种情况,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]))
在第一个代码中,x
isVariable
和op
取决于x
,所以x
总是在 之后评估op
。但在第二种情况下,x
变为Tensor
,并op
取决于Variable x
(之后x = x + 0
,x 被覆盖)。所以op
不依赖于Tensor x
.
解决方案
评估张量的顺序是未定义的。请参阅API 文档(在“返回”信息中的最底部Session.run()
)。因此,您不应依赖它们以特定顺序执行。如果您需要保证订单,您可能应该run
对不同的张量/操作使用单独的调用。
推荐阅读
- php - 如果变量包含数组中的值,如何在变量周围添加 HTML 标记,如果 Smarty 中没有,如何保持原样?
- java - 使用 Spring 控制器和 PrintWriter 下载文件
- php - 无法添加外键约束 Laravel 6.x
- laravel - 电子邮件通知中的条件路由在 Laravel 中失败
- reactjs - 打字稿附加道具
- python-3.x - 正则表达式 (\w)\1{4,} 是什么意思 python
- javascript - 使用 AJAX 将 FormData 发送到 nodejs + express 服务器
- python - FastAPI 发现我的 JSON 对象数组是一个无效列表
- html - 如何根据选择选项的值启用或禁用输入使用 jQuery?
- powershell - PowerShell 从脚本创建脚本