1. ホーム
  2. コンパイラ言語
  3. パイソン

TensorFlowのエラー:ハッシュ化できない型:'numpy.ndarray'エラー

2022-01-21 07:43:47

TensorFlowで計算されたグラフを実行する過程で、sess.run()という行がunhashable type: 'numpy.ndarray' errorというエラーを報告することがありますが、これはおおよそunhashable typeを意味します。問題はfeed_dict内部にあるのです。問題はfeed_dictの内部にあります。

解決策1.

  sessを起動し、placeholederにデータを供給すると、エラーが報告されます。TypeError: unhashable type: 'numpy.ndarray'. これは変数名とプレースホルダー名の衝突が原因なので、不可解なTypeErrorが発生した場合は変数名が重複していないかどうか考えてみてください。 

解決策2.

ご存知のように、feed_dict 引数は一般にプレースホルダが指す特定のデータを辞書として保存しています。Pythonの辞書のキーと値の型には制限があり、すべての型が辞書のキーと値として使えるわけではありません。つまり、ここで問題になるのはfeed_dictに格納されているキーや値に問題があるということです。一般的にキーはplaceholderに設定されており、初心者は使用時にキーに問題がある可能性があります。ちょっと確認してみてください。

しかし、上記の問題以外にも、例えばプレースホルダがtf.int32で実データがnp.int64のように、プレースホルダと実データの型が同じでない場合も考えられますので、その場合は対応する型を同じに設定する必要があります。矛盾があると、上記のような問題が発生する可能性があります。参考リンク: https://stackoverflow.com/questions/43081403/unhashable-type-numpy-ndarray-error-in-tensorflow ps:

Python辞書の簡単なおさらいを一通りやってみる

1. Kin はハッシュ化可能でなければならない、すなわち不変でなければならない ユーザー実装のオブジェクトは id() が異なるため、デフォルトではすべてハッシュ化可能です。ハッシュ可能なオブジェクトは、以下のプロパティを持つ必要があります。hash()関数をサポートし、hash()メソッドで得られたハッシュ値はイミュータブルであること。Pythonの基本型である文字列、整数、浮動小数点数、タプルはimmutableであり、キーとして使用できる(リスト型は不可)。

辞書はハッシュテーブルで実装されるため、ハッシュテーブルにはスパース性があり、ある程度のスペースを占有することになる。もちろん、このメモリは辞書の速度に比べれば無視できる程度である。3. 3. 辞書の並び順が一意でない。ハッシュテーブルでは、挿入時や読み出し時にハッシュの衝突が発生することがあるため、結果として辞書の順番は一意ではないが、辞書の順番がどう変わろうとも、2組の辞書キーが同じであれば、どちらの辞書も等しいことになる