2016-06-21 23 views
0

爲了舉例,考慮計算張量流中的內積。我試圖在TensorFlow的圖表中用不同的方式來引用圖表中的事物,當用一個使用feed的會話對它進行評估時。請看下面的代碼:你可以給TensorFlow提供什麼數據類型作爲關鍵字?

import numpy as np 
import tensorflow as tf 

M = 4 
D = 2 
D1 = 3 
x = tf.placeholder(tf.float32, shape=[M, D], name='data_x') # M x D 
W = tf.Variable(tf.truncated_normal([D,D1], mean=0.0, stddev=0.1)) # (D x D1) 
b = tf.Variable(tf.constant(0.1, shape=[D1])) # (D1 x 1) 
inner_product = tf.matmul(x,W) + b # M x D1 
with tf.Session() as sess: 
    sess.run(tf.initialize_all_variables()) 
    x_val = np.random.rand(M,D) 
    #print type(x.name) 
    #print x.name 
    name = x.name 
    ans = sess.run(inner_product, feed_dict={name: x_val}) 
    ans = sess.run(inner_product, feed_dict={x.name: x_val}) 
    ans = sess.run(inner_product, feed_dict={x: x_val}) 
    name_str = unicode('data_x', "utf-8") 
    ans = sess.run(inner_product, feed_dict={"data_x": x_val}) #doesn't work 
    ans = sess.run(inner_product, feed_dict={'data_x': x_val}) #doesn't work 
    ans = sess.run(inner_product, feed_dict={name_str: x_val}) #doesn't work 
    print ans 

了以下工作:

ans = sess.run(inner_product, feed_dict={name: x_val}) 
ans = sess.run(inner_product, feed_dict={x.name: x_val}) 
ans = sess.run(inner_product, feed_dict={x: x_val}) 

,但最後三個:

name_str = unicode('data_x', "utf-8") 
ans = sess.run(inner_product, feed_dict={"data_x": x_val}) #doesn't work 
ans = sess.run(inner_product, feed_dict={'data_x': x_val}) #doesn't work 
ans = sess.run(inner_product, feed_dict={name_str: x_val}) #doesn't work 

沒有。我檢查了爲什麼鍵入x.name,但即使我將它轉換爲python類型的解釋器時,它仍然無法正常工作。 I documentation似乎認爲鍵必須是張量。然而,它接受x.name,而它不是張量(它的一個<type 'unicode'>),是否有人知道發生了什麼?


我可以粘貼文件說,它需要一個張量:

可選feed_dict參數允許呼叫者覆蓋在圖形張量 值。在feed_dict每個鍵可以是 以下類型之一:

如果鍵是一張量,該值可以是一個Python標量,字符串, 列表或numpy的ndarray可以轉換到相同的D型爲 張量。此外,如果密鑰是佔位符,則將檢查值的形狀是否與佔位符兼容。如果 鍵是SparseTensor,則該值應該是SparseTensorValue。 feed_dict中的每個 值必須可轉換爲相應鍵的dtype 的numpy數組。

回答

0

TensorFlow主要期望tf.Tensor對象作爲Feed詞典中的鍵。如果它等於會話圖中某些tf.Tensor.name屬性,它也將接受一個字符串(可能是bytesunicode)。

在你的例子中,x.name的作品,因爲xtf.Tensor,你正在評估它的.name屬性。 "data_val"不起作用,因爲它是tf.Operation(即x.op)的名稱,而不是tf.Tensor的名稱,該名稱是tf.Operation的輸出。如果您打印x.name,您會看到它的值爲"data_val:0",這意味着「tf.Operation的第0個輸出被稱爲"data_val"

相關問題