2017-03-02 60 views
13

我有一個佔位符變量期望一個批輸入圖像: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的陣列,因爲這會減緩我的程序下來,有沒有其他辦法?

回答

0

這適用於我最新版本...也許你有TF的舊版本?

a = tf.Variable(1) 
sess.run(2*a, feed_dict={a:5}) # prints 10 
+0

好吧,這將爲它提供數據。我需要的是'feed_dict = {a:someTensorObject}' – mcExchange

+0

正確,'feed_dict'只用於饋送數據。如果要提供張量,請使用常規TensorFlow API。 IE,'tf.add(a,b)''將''a'和'b'餵給''tf.add''。你可能想'sess.run(a.assign(someTensorObject))' –

0

您可以使用feed_dict將數據提供給非佔位符。因此,首先,將數據流圖直接連接到張量數據源(即不使用佔位符)。然後,當你想與您的numpy的數據運行,你可以有效地掩蓋myImportTensormyNumpyData,像這樣:

mLoss, = sess.run([loss], feed_dict={myImportTensor: myNumpyData}) 

[我還在努力弄清楚如何與多個但是張量數據源做到這一點。]

1

2016年在GitHub上對此進行了討論,請檢查here。這裏的關鍵點在於通過concretevitamin

One key thing to note is that Tensor is simply a symbolic object. The values of your feed_dict are the actual values, e.g. a Numpy ndarry.

張量作爲符號對象在圖形流而實際值是在其外部,那麼我們只能通過實際的值到圖形和符號對象不能存在於圖表之外。

相關問題