【2025年版】Loss が下がらない原因は?深層学習のためのチェックリスト12選|Keras・TensorFlow

投稿日:2025年11月27日木曜日 最終更新日:

Keras TensorFlow

X f B! P L
Loss が下がらない原因は?深層学習のためのチェックリスト12選

Loss が下がらないときのチェックリスト12選【Keras/TensorFlow】

深層学習の学習がうまく進まず、Loss(損失)が全く下がらない・むしろ増える という現象は初心者から上級者までよく遭遇する問題です。

この記事では、Keras/TensorFlow を使った学習で Loss が下がらないときに確認すべきポイントを チェックリスト形式で12項目 にまとめました。

✔ 学習率(learning rate)が高すぎないか?

最もよくある原因です。
特に AdamSGDlr=0.001 のままにしているとモデルやデータによっては高すぎる場合があります。

✔ データのスケーリングは正しく行われているか?

画像なら 0〜1 正規化を忘れていたり、正規化前後が混在すると Loss が爆発します。

image = image.astype("float32") / 255.0

データ前処理の基礎は fit と GradientTape の違いまとめ の記事にも関連解説があります。

✔ ラベルがズレている・one-hot が間違っている

  • 分類でカテゴリ番号が間違っている
  • one-hot の次元がクラス数と一致しない
  • ラベルの型が int でない

✔ 損失関数と出力層の組み合わせが合っているか

タスク出力層損失関数
多クラス分類softmaxcategorical_crossentropy
多クラス(整数ラベル)softmaxsparse_categorical_crossentropy
二値分類sigmoidbinary_crossentropy

✔ バッチサイズが大きすぎる

32〜128あたりが無難。特に小規模データは 8 or 16 が効くことも。

✔ モデルが複雑すぎる or 単純すぎる

基礎的な層の違いは Dense 層とは?畳み込みとの違い が参考になります。

✔ 重みの初期化が不適切

Dense や Conv2D をカスタムで書いていると初期化ミスが起こりがち。

kernel_initializer="he_normal" が安全なことが多いです。

✔ データシャッフルが正しく動いていない

時系列データで shuffle=True にすると逆に悪化することがあります。用途に合わせて調整してください。

✔ 9. 学習データが少なすぎる、偏っている

同じ画像ばかり → augmentation が必須。

✔ Callback が学習を止めすぎている

EarlyStopping が「patience=1」など厳しすぎる設定だとモデルが育ちません。 ログを残したい場合は CSVLogger の使い方 で記録方法を解説しています。

✔ データのラベルと画像が対応していない

意外と多い致命的ミス。フォルダ名のタイポなど。

✔ グラデーションが消失している / 爆発している

深いモデルで Relu が多いと勾配消失が起こることがあります。

  • BatchNorm を挟む
  • Mish / GELU を試す
  • Mixed Precision で改善する場合も

まとめ

Loss が下がらない原因は多岐にわたりますが、多くの場合は 学習率・データ前処理・損失関数の設定ミス のどれかに収まります。

この記事のチェックリストを順番に確認することで、ほとんどのケースで原因を特定できるはずです。