質問するログイン新規登録
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

934閲覧

エポック数1の場合の損失関数のグラフについて

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2022/11/17 05:53

0

1

前提

機械学習の勉強中の者です。
データセットを自前で用意し、マッティングのモデルを構築し、実装しました。
しかし、データセットの傾向が偏っていることもあり、少ないエポック数で十分にロスが下がります。

普通損失関数のグラフといえば、曲線で緩やかに収束していくと思うのですが、epoch数が1の場合直線で急激なロスの低下になってしまいます。(一応、train_lossの方がval_lossよりも低い値になっています。)

そこで、このようなグラフが出力された場合は、もう少しバッチサイズやエポック数を見直した方が良いのか、それともこの場合はこれで良しとして良いのかどうかが分かりません。

イメージ説明

実現したいこと

モデルの学習をここで終了するべきかの判断をしたい。

該当のソースコード

python

1ソースコード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

学習終了の判断にあたって,損失減少が急激かどうかを見るのは本質的ではなく,学習が停滞したかどうかを見るのが一般的になります.Kerasを利用しているならtf.keras.callbacks.EarlyStoppingを利用して,学習終了の判断を委譲することができます.

曲線で緩やかに収束していく
現状,1epoch毎の変化しか見ていないので曲線を観測できませんが,1バッチ毎の損失を観測できるようにCallbacks APIを利用して学習履歴を作成することで,1epoch間隔でも曲線を観測できるでしょう.ページ最下部の「例: 損失の履歴を記録する」がまさにそれを実現していますので参考までに.

投稿2022/11/17 08:14

PondVillege

総合スコア1581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/11/17 09:25

ご回答ありがとうございます。 私は学習終了は 1.train_lossがval_lossを下回っている 2.両者ともlossが増加していない という2点を満たせば、終了だと思っているのですが、そうでない場合も考えられるでしょうか? 例えば、収束前に増加傾向が見られた場合には即学習を終了した方が良いですか?
PondVillege

2022/11/17 09:44 編集

私としては,validation lossに減少の余地がある場合は学習終了でないと思っています. なので,lossの大小関係やlossが増加していないという状態は判断材料にならない気がします. 現に,EarlyStoppingはlossの最小値が更新されなければ学習終了するように動きますし,他のCallbacksにあるReduceLROnPlateauでは,学習が停滞した場合に学習率を下げるようにする機能が備わっています.これはまさに「lossに減少の余地がある場合は学習終了でない」からこそ実装されている関数です. train_lossがval_lossを下回るのは,学習を進めることにおいて最低条件だと思っています.逆になっていたら過学習ですからね. > 収束前に増加傾向が見られた場合には即学習を終了した方が良いですか? 増加したら概ね過学習と捉えられるので,増加する前に終了した方がいいです.CallbacksではModelCheckpointがあるので,最良のモデルを常に保存させることで,増加を検知して終了しても最良のモデルを取り出すことができます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問