1. ホーム
  2. パイソン

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

2022-01-23 13:40:56
<パス

グラフを計算するためのTensorFlowの実行中に、sess.run()という行がエラーを報告することがあります。 unhashable type: 'numpy.ndarray' error 大雑把に言うと、これは ハッシュ化できないタイプ

この問題は、次のような場合に発生します。 feed_dict の中にあります。私たちは feed_dict パラメータは通常、プレースホルダ placeholder 指し示された特定のデータは、辞書として格納されます。Pythonにおける辞書のキーと値の型には制限があり、すべての型が辞書のキーと値として動作できるわけではありません。

つまり、ここでの問題は、feed_dictに格納されているキーや値に問題があるということです。通常、キーには placeholder 初心者が使うとキーに問題がある可能性があるので、一応注意して確認してみてください。
しかし、上記のような問題以外に考えられるケースは 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の基本型である文字列、整数、浮動小数点数、タプルは不変であり、キーとして( リスト型は ).

2. 辞書のメモリーオーバーヘッドはあるが、高速アクセス
辞書はハッシュテーブルで実装されるため、ハッシュテーブルには疎なペアが必要であり、そのため辞書はある程度のスペースを占めることになる。もちろん、これは辞書の速度に比べれば無視できる程度である。

3. 辞書のキーの順番は一意ではない
ハッシュテーブルは挿入時や読み込み時にハッシュの衝突が発生することがあるため、辞書のカーネルの順番は一意ではないが、辞書のカーネルの順番にかかわらず、両方の辞書カーネルペアが同じであれば、両方の辞書が等しいことになる