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させるには、