初心者向け、kerasでよくあるエラーの対処法


pythonで機械学習をする上でよく使われるkeras(&tensorflow)。

kerasを使う上でのエラー対処法についてまとめた記事がなかったので、teratailの解決済み質問をもとに、稚拙ですがまとめておきます。

ImportError,AttributeError

・バージョンを下げる、上げるなどで解決(ImportError,AttributeError)
・再インストールで解決することもある(ImportError)
・importするファイルが間違っている(AttributeError)
・tensorflow.kerasとkerasは別物
・タイプミス(大文字、小文字の区別はしっかりと)

kerasではいろんなライブラリのバージョンによる影響が大きい。古すぎたり新しすぎたりするとInportErrorを起こすことがある。

AttributeErrorについては、以下記事を参照。

[python]「AttributeError: module(object) ‘xxx’ has no attribute ‘yyy’」が起きたときの対処法5選

ValueError

共通項

・モデルのsummaryを確認するmodel.summary()
・print(data.shape)でデータの形状を確かめる

ValueErrorで多いのは、データの次元がモデルの期待と異なること。データの形状を確認し、違っていればreshape()を用いてデータを整形する。

numpy.reshapeのドキュメント

Shapes A and B are incompatible

・モデルの出力と出力データの次元が合っているか

2値分類のはずなのにモデルの出力が3(Dense(3)とか)になっている場合など。model.summary()でモデルを分析する必要がある。

expected ndim=A, found ndim=B

・Denseの入力は基本1次元配列なので、reshapeやFlattenで1次元に整形する
・もしくはinput_shapeを変える必要あり
・input_shapeは、batch sizeを含まない
・画像データは(サンプル数, 高さ, 幅, チャンネル) になるようreshapeする
・LSTMの場合[バッチ数, 時間軸, チャンネル数]とする必要あり

expected layer_name to have shape A dimensions but got array with shape B

・RGBと白黒を間違えてないか(画像の場合)
・入力データとモデル入力の次元が合っているか
・1×要素数のテンソルにreshapeする(テストデータが1件のみの場合起こる)

Input arrays should have the same number of samples as target arrays. Found A input samples and B target samples

・入力データと出力データの数が合っているか

ResourceExhaustedError

・OOM(Out Of Memory、メモリ不足、ResourceExhaustedError)
・バッチサイズを下げる
・PCを再起動させる

GPUやパソコンのメモリ不足の際に起こるエラー。メモリを増やすか処理量を減らすのが一般的な方法。

ものによってはプログラムがメモリに蓄積?して発生することもあるので、再起動でリセットするとうまくいくことがある(今までうまくいっていた場合など)。

学習精度が良くないとき

・データの前処理をする
・入力データ自体に問題がある
・予測データは合っているか
・ハイパーパラメータを変える
・機械学習でも学習できないことはある

画像データなら正規化([0,255]→[-1,1])できているか、入力データや予測データが破損してないかなどなど。

とにかくデータが正確かどうかは必ず確認する必要がある。データが正確でなければ、学習も予測も当然正確でない。

また、データの種類が足りない場合も、学習精度は上がらない。気温だけで天気予報ができたら予報士は苦労しない。

そして、機械学習で学習できないこともある。例えばサイコロの出る目はランダムなので、機械学習を使って予測することはできない。向き不向きはある。

まとめ

以上、エラー対処法になります。

自分自身もそれほどプロフェッショナルというわけではないので、内容に間違いがあるかもしれません。その時はコメントにてご指摘ください。