1. 程式人生 > >TensorFlow 報錯:unhashable type: 'numpy.ndarray' error

TensorFlow 報錯:unhashable type: 'numpy.ndarray' error

在TensorFlow執行計算圖的過程中,sess.run()那行可能會出現報錯 unhashable type: 'numpy.ndarray' error 大致意思為不可雜湊的型別 問題出現在feed_dict 裡面。、

解決方法 1:

  在啟動sess並給placeholeder喂資料後報錯:TypeError: unhashable type: 'numpy.ndarray'。 這是由於變數名與佔位符名衝突導致的,看到莫名其妙的TypeError要考慮是否存在變數名重複。 

解決方法2:

我們知道,feed_dict 引數一般存放佔位符placeholder 所指向的具體的資料,以字典方式儲存。而Python中字典的key和value型別是有限制的,並不是所有型別都能充當字典中的key和value。 所以此處的問題就是在儲存在feed_dict中的鍵或值出了問題,一般key設定為placeholder ,新手在使用的時候可能會在key上面出現問題,注意排查一下就好。

但是除了以上說的那個問題以外,其他有可能出現的情況是placeholder 和真實資料的型別不一樣,比如placeholder 為tf.int32,而真實資料為np.int64 ,這裡需要將所對應的型別設為一致。不一致有可能會導致以上問題。參考連結: https://stackoverflow.com/questions/43081403/unhashable-type-numpy-ndarray-error-in-tensorflow ps:

順帶簡要複習一下Python字典的特點

1.健必須是可雜湊的,即不可變 使用者自己實現的物件預設都是可雜湊的,因為id()不同。一個可雜湊物件應該有以下屬性: 支援hash()函式,通過hash()方法得到的雜湊值是不變的。 Python的基本型別如字串、整數、浮點數還有元組都是不可變的,都可以作為 key(list型別不可以)。

2.字典記憶體開銷大,但訪問速度快 因為字典是由散列表實現的,散列表中肯定對出現一些稀疏,這就導致了字典會佔用一些空間。當然和字典的速度相比這點記憶體是可以忽略的。 3.字典的健順序不是唯一的 由於散列表在插入或者讀取時候可能會產生雜湊衝突,這就導致了字典中健的順序不是唯一的,但是不管字典健的順序怎麼變,如果兩個字典健值對都一樣那麼這兩個字典都是相等的