Tensorflow:如何使用张量来提供占位符变量?

时间:2017-03-02 16:03:07

标签: tensorflow

我有一个占位符变量,需要一批输入图像:

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数组,因为这会减慢我的程序速度,还有其他方法吗?

4 个答案:

答案 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