2017-09-25 903 views
0

我有一本字典,我需要通過鍵從字典中獲取元素。但是,關鍵需要設置爲tf.placeholder並獲取值。例如,我想獲取Tensorflow中的字典元素

dict={'a':10,'b':20} 
key=tf.placeholder(tf.float32, shape=[1]). 
result=dict[key] 
sess=tf.InteractiveSession() 
sess.run(result, {key:'a'}) 

但它說:

KeyError:<tf.Tensor 'Placeholder_1:0' shape=(?, 1) dtype=float32> 

誰能幫我把從字典中的值,但提供feed_dict的關鍵?

回答

0

這是一個常見的與TF混淆。雖然一切看起來像Python代碼,但實際發生的事情是,TF正在構建一個操作圖,然後在python解釋器上下文之外執行它。這意味着你不能從圖中訪問python對象。據我所知,TensorFlow在其張量中不支持字符串索引。所以你在做什麼都行不通。你可以做的最接近的是使用數字索引。

data = tf.constant([10, 20]) 
key = tf.placeholder(tf.float32, shape=[1]). 
result = data[key] 
sess=tf.InteractiveSession() 
sess.run(result, {key: 1}) 
# result should now contain 20 
+0

感謝瘋狂!如果我的字典是dict = {'a':loss1,'b':loss2}和loss1,2是張量,會怎麼樣?我想根據tf.placeholder評估loss1或loss2是'a'還是'b'。 –

+0

只需使用數字索引。損失= [loss1,loss2]並將0或1傳遞給Feed字典。另外,不要將你的變量'dict'與dict數據類型衝突,你可以通過這種方式獲得一些非常不愉快的錯誤。 –

+0

如果你希望它是友好的,你可以將人類可讀的鍵映射到單獨的字典中的數字。 –

0

看來,這爲我工作基礎上瘋狂的解決方案:

dict={'a':10,'b':20} 
data = tf.convert_to_tensor(dict.values()) 
key = tf.placeholder(tf.int32, shape=None) 
result = tf.gather(data, key) 
sess=tf.InteractiveSession() 
sess.run(result, {key: [0,1,0]})