【发布时间】:2018-01-26 16:28:58
【问题描述】:
我试图了解 Session.run() 在 Tensorflow 流程中的工作原理。我知道 Session.run() 运行我们给它的“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)
使用此代码:
import tensorflow as tf
x = tf.Variable(42)
assign2 = tf.assign(x, 14)
assign1 = tf.assign(x, 13)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2, val3 = sess.run([x, assign1, assign2])
print(val1, val2, val3)
(唯一的变化是在第二个代码中首先分配 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)
在我的 Session.run() 中,我有 z 和 assign。要获得 z,我需要 foo()。当 foo() 运行时,assign = tf.assign(x[4], 100) 也会运行。但是,输出是[1, 2, 3, 4, 5] 13,我不知道 13 是从哪里来的。
【问题讨论】:
标签: python variables tensorflow graph variable-assignment