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()を用いてデータを整形する。
###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])できているか、入力データや予測データが破損してないかなどなど。
とにかくデータが正確かどうかは必ず確認する必要がある。データが正確でなければ、学習も予測も当然正確でない。
また、データの種類が足りない場合も、学習精度は上がらない。気温だけで天気予報ができたら予報士は苦労しない。
そして、機械学習で学習できないこともある。例えばサイコロの出る目はランダムなので、機械学習を使って予測することはできない。向き不向きはある。
#まとめ
以上、エラー対処法になります。
自分自身もそれほどプロフェッショナルというわけではないので、内容に間違いがあるかもしれません。その時はコメントにてご指摘ください。