我有一个占位符变量,需要一批输入图像:
input_placeholder = tf.placeholder(tf.float32, [None] + image_shape, name='input_images')
现在我有2个输入数据来源:
1)张量和
2)一些numpy数据。
对于numpy输入数据,我知道如何将数据提供给占位符变量:
sess = tf.Session()
mLoss, = sess.run([loss], feed_dict = {input_placeholder: myNumpyData})
如何将张量提供给该占位符变量?
mLoss, = sess.run([loss], feed_dict = {input_placeholder: myInputTensor})
给了我一个错误:
TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays.
我不想使用.eval()
将张量转换为numpy数组,因为这会减慢我的程序速度,还有其他方法吗?
答案 0 :(得分:3)
您可以使用feed_dict
将数据提供给非占位符。因此,首先,将数据流图直接连接到myInputTensor
张量数据源(即不要使用占位符)。然后,当您想要使用numpy数据运行时,可以使用myImportTensor
有效地屏蔽myNumpyData
,如下所示:
mLoss, = sess.run([loss], feed_dict={myImportTensor: myNumpyData})
[我仍然试图弄清楚如何使用多张量数据源来做这件事。]
答案 1 :(得分:3)
2016年已在GitHub上讨论过这个问题,请查看here。以下是concretevitamin的关键点:
需要注意的一件事是,Tensor只是一个象征性的对象。您的feed_dict的值是实际值,例如一个Numpy ndarry。
作为符号对象的张量在图形中流动,而实际值在图形之外,那么我们只能将实际值传递给图形,并且符号对象不能存在于图形之外。
答案 2 :(得分:0)
解决问题的一种方法是实际删除占位符张量,并用“ myInputTensor”替换它。
您将使用myInputTensor作为图形中其他操作的源,并且当您想使用np数组作为输入数据来推断图形时,将直接向该张量输入值。
这是一个简单的例子:
import tensorflow as tf
import numpy as np
# Input Tensor
myInputTensor = tf.ones(dtype=tf.float32, shape=1) # In your case, this would be the results of some ops
output = myInputTensor * 5.0
with tf.Session() as sess:
print(sess.run(output)) # == 5.0, using the Tensor value
myNumpyData = np.zeros(1)
print(sess.run(output, {myInputTensor: myNumpyData}) # == 0.0 * 5.0 = 0.0, using the np value
答案 3 :(得分:-1)
这对我来说最新版本...也许你有旧版本的TF?
a = tf.Variable(1)
sess.run(2*a, feed_dict={a:5}) # prints 10