我想知道会话.运行()在张量流中工作。我知道会话.运行()运行我们给它的“fetch”参数指定的子图。因为根据子图的哪个部分先执行,我们可能会得到不同的结果,所以我想看看是否真的是这样。假设我们比较这段代码的输出:
import tensorflow as tf
x = tf.Variable(42)
assign1 = tf.assign(x, 13)
assign2 = tf.assign(x, 14)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2, val3 = sess.run([x, assign1, assign2])
print(val1, val2, val3)
使用此代码:
^{pr2}$(唯一的变化是在第二个代码中分配14个优先项)。我希望看到第一个代码产生输出14,14,14,而第二个代码产生13,13,13。在
然而,结果是第一个产生了13,13,13,而第二个产生了14,14,14。在
为什么会这样?在
更新:以下选择的答案:
我不太明白什么是独立的什么不是。例如,在以下代码中:
x = tf.Variable([1, 2, 3, 4, 5])
def foo():
tmp_list = []
assign = tf.assign(x[4], 100)
for i in range(0, 5):
tmp_list.append(x[i])
return tmp_list
z = foo()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2 = sess.run([z, assign])
print(val1, val2)
在我的会话.运行()我有z和assign。为了得到z,我需要foo()。运行foo()时,assign = tf.assign(x[4], 100)
也会运行。但是,输出是[1, 2, 3, 4, 5] 13
,我不知道这13个是从哪里来的。在
不保证哪个独立的操作首先执行,所以这两种情况下都可以得到13或14。你的结果纯粹是运气。试试这个:
。。。你会看到13和14被打印出来。在
更新后续问题:
z = foo()
(它只是x
片的列表)不依赖于assign
。请注意,foo
只在会话启动之前调用一次。我认为,最好的办法是把这个图形形象化。在如果你说。。。在
^{pr2}$。。。tensorflow不会运行}不依赖于运算
assign
,因为它不运行python函数,它计算张量。张量x
或{assign
。在依赖关系是由使用张量执行的操作定义的。所以如果你有。。。在
。。。这个是一个依赖关系:为了计算
y
,tensorflow必须计算x
。希望这能让事情变得更清楚。在相关问题 更多 >
编程相关推荐