【エラー解決】ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (60000, 10, 2)

KerasでMNISTの手書き文字を深層学習していたときに出たエラー

ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (60000, 10, 2)

エラーの原因と解決方法

簡単に言えば、一つのJupyter Notebookにごちゃごちゃとコードを書いている時に上記のエラーが起こることがある。

自分が書いたコードにはスペルミスなどもなく、セルの順番も適切でだったりするので、「なぜ?」となりやすい。

参考:Kerasでのエラー(https://teratail.com/questions/107171
回答を引用させてもらうと、

jupyter-notebookの場合メモリが保持されるので、変数が変更されたりすると中身が変わっている状態になってエラーになります。
上記のコードは間違っておりませんので、x_train、y_train(もしくはx_test、y_test)がどこかのタイミングで変更された可能性が高いです。

そもそもDense層が3つしかないので、dense_6ということはモデルを二度作成していて、その最後の層の入力がおかしいというエラーです。
最後の層は前の層からの入力のほか、教師データのラベルも入力に受け取りえます。
この度のエラーはまさに後者の方です。
y_train(y_test)がおかしいようですね。
データをロードし直していない状態で、y_train(y_test)を書き換えながら2度以上エンコードしていることが問題です。
このようなエラーを回避するにはセルの分割の場所を意識するとよいかもしれません。

・Jupyter Notebook、あるいはIPythonの再起動、kernel restart
・今書き足しているコードは別のファイルに書き直す
・ソースを整理し直す

などを試してみてください。

ちなみに、PyCharmのJupyter NotebookでRestartさせるには、

無料体験レッスン実施中

こちらも:Pythonでサービスを運用するならこのサーバー


約8,000名の受講生と80社以上の導入実績
プログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
★★無料体験レッスン実施中です。★★
こちらから

シェアする

  • このエントリーをはてなブックマークに追加

フォローする