私はKerasを使って私のプロジェクトのためにニューラルネットワークを訓練しています。 Kerasは早期停止のための機能を提供しました。早期停止を使用してニューラルネットワークが過剰適合するのを防ぐためにどのようなパラメータを守るべきかを知っていますか?
早期停止は、基本的に、損失が増加し始めると(つまり検証の正確性が低下し始めると)トレーニングを停止することです。によると ドキュメント それは以下のように使われます。
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
値はあなたの実装(問題、バッチサイズなど)に依存しますが、一般的に私が使用するであろう過剰適合を防ぐために。
monitor
引数を'val_loss'
に設定して、検証の喪失を監視します(交差検証または少なくともトレイン/テストセットを使用する必要があります)。min_delta
は、あるエポックでの損失を改善として定量化するかどうかのしきい値です。損失の差がmin_delta
を下回る場合、それは改善なしとして定量化されます。損失が悪化したときに関心があるため、0のままにしておくことをお勧めします。patience
引数は、損失が増加し始めたら(改善が止まるまで)止まるまでのエポック数を表します。これはあなたの実装に依存します、あなたが非常に小さなバッチまたは大きな学習率あなたの損失を使うならばzig-zag(精度がよりうるさい)ので、大きなpatience
引数を設定してください。 大きなバッチと小さな学習率を使用すると、損失がスムーズになるため、小さいpatience
引数を使用できます。いずれにせよ、私はそれを2のままにして、モデルにもっとチャンスを与えるようにします。verbose
は何を印刷するかを決定し、デフォルト(0)のままにします。mode
引数はあなたの監視された量がどの方向を向いているかに依存します(減少または増加するはずです)。損失を監視するのでmin
を使用できます。しかし、kerasがそれを処理してauto
に設定しましょう。だから私はこのようなものを使用して、エラーの損失を早めに停止した場合と停止しない場合でプロットして実験します。
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
コールバックがどのように機能するかについてのあいまいさの可能性のために、私はもっと説明しようとします。モデル上でfit(... callbacks=[es])
を呼び出すと、Kerasは与えられたコールバックオブジェクトにあらかじめ決められた関数を呼び出します。これらの関数はon_train_begin
、on_train_end
、on_Epoch_begin
、on_Epoch_end
およびon_batch_begin
、on_batch_end
と呼ばれることができます。早期停止コールバックはすべてのエポック終了時に呼び出され、現在のものと最良の監視値を比較し、条件が満たされると停止します(最良の監視値を観察してから経過した期間最後の値はmin_deltaなどよりも大きいです。
コメントで@BrentFaustによって指摘されているように、モデルのトレーニングはアーリーストップ条件が満たされるか、またはfit()
のepochs
パラメータ(デフォルト= 10)が満たされるまで続けられます。 Early Stoppingコールバックを設定しても、モデルはepochs
パラメータを超えてトレーニングされません。したがって、epochs
の値を大きくしてfit()
関数を呼び出すと、Early Stoppingコールバックの恩恵を受けることができます。