我是否纠正在Tensorflow中,当我run
进行任何操作时,我的feed_dict
需要为我所有的占位符,甚至是与我正在运行的无关的占位符赋予值吗?
尤其是我正在考虑进行预测,在这种情况下,我的targets
占位符是不相关的。
答案 0 :(得分:2)
好吧,这取决于您的计算图的外观以及运行由张量馈送的操作的方式(此处为placeholders
)。如果您将在会话中执行的计算图的任何部分都不依赖于占位符,则不需要为其输入值。这是一个小例子:
In [90]: a = tf.constant([5, 5, 5], tf.float32, name='A')
...: b = tf.placeholder(tf.float32, shape=[3], name='B')
...: c = tf.constant([3, 3, 3], tf.float32, name='C')
...: d = tf.add(a, c, name="Add")
...:
...: with tf.Session() as sess:
...: print(sess.run(d))
...:
# result
[8. 8. 8.]
另一方面,如果执行计算图的一部分,该部分依赖于占位符,则必须将其馈入一个值,否则它将引发InvalidArgumentError
。这是一个演示此示例:
In [89]: a = tf.constant([5, 5, 5], tf.float32, name='A')
...: b = tf.placeholder(tf.float32, shape=[3], name='B')
...: c = tf.add(a, b, name="Add")
...:
...: with tf.Session() as sess:
...: print(sess.run(c))
...:
执行上面的代码,引发以下InvalidArgumentError
InvalidArgumentError:您必须使用dtype float和shape [3]输入占位符张量'B'的值
[[[节点:B =占位符类型= DT_FLOAT,形状= [3],_ device =“ / job:localhost /副本:0 /任务:0 /设备:CPU:0”]]
因此,要使其正常工作,您必须使用feed_dict
来填充占位符,如下所示:
In [91]: a = tf.constant([5, 5, 5], tf.float32, name='A')
...: b = tf.placeholder(tf.float32, shape=[3], name='B')
...: c = tf.add(a, b, name="Add")
...:
...: with tf.Session() as sess:
...: print(sess.run(c, feed_dict={b: [3, 3, 3]}))
...:
...:
[8. 8. 8.]