3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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])できているか、入力データや予測データが破損してないかなどなど。

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

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

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

#まとめ

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

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?