TensorFlow意外行为

时间:2016-09-26 13:09:29

标签: tensorflow

我正在运行以下代码:

import tensorflow as tf

sess = tf.InteractiveSession()
y = tf.Variable(initial_value=[1,2])
sess.run(y, feed_dict={y: [100,2]})

给出:     [100,2]

然而,在那之后:

sess.run(y)

给出y的原始值:[1,2]。

为什么不是:

sess.run(y, feed_dict={y: [100,2]})

更新y的值,并将其保存?

2 个答案:

答案 0 :(得分:2)

因为feed_dict会覆盖字典键的值。

声明:

sess.run(y, feed_dict={y: [100,2]})

您告诉tensorflow将y的值替换为当前计算的[100, 2] 。这不是作业。

因此,下次通话

sess.run(y)

获取原始变量并使用它。

如果要为变量赋值,则必须使用tf.assing

在计算图中定义此操作

答案 1 :(得分:1)

如果要使用Feed字典,请初始​​化占位符而不是变量并定义输出。

作为示例(与您的问题代码的风格相同),

import tensorflow as tf
import numpy as np

sess = tf.InteractiveSession()
inputs = tf.placeholder(tf.int32, shape = (2,2))
output = tf.matmul(inputs, tf.transpose(inputs))

test_input = np.array([[10,2], [4,4]])
print test_input.shape
# (2,2)

sess.run(output, feed_dict = {inputs : test_input})
# array([[104, 48], [48, 32]], dtype=int32)

如果您只想将变量的值更改为nessuno的答案。