前提
現在kerasを用いた機械学習で,EarlyStopping関数を用いて過学習の回避とエポックの決定の効率化を試みています.
そこでまずは例として以下のような実装を行ったとします.
python
1early_stopping = EarlyStopping(monitor='val_loss', 2 min_delta=0.0, 3 patience=3, 4 mode='min' 5 ) 6 7 8# 学習 9history = model.fit( 10 X_train, 11 y_train, 12 epochs=20, 13 batch_size=32, 14 validation_data=[X_test, y_test], 15 callbacks=[early_stopping] # CallBacksに設定 16 )
そこで仮にval_lossにおける実行結果が以下のようになったとします.
Epoch 1/20 val_loss: 0.4000 Epoch 2/20 val_loss: 0.3500 Epoch 3/20 val_loss: 0.3600 Epoch 4/20 val_loss: 0.3200 Epoch 5/20 val_loss: 0.3300 (省略) Epoch 14/20 val_loss: 0.1000 Epoch 15/20 val_loss: 0.0500 Epoch 16/20 val_loss: 0.0700 Epoch 17/20 val_loss: 0.0600 Epoch 18/20 val_loss: 0.0800
15エポック目までは順調に値は小さくなっていくのですが,16~18エポックまでの値が15エポック目の値よりも大きいため(patience=3のため)18エポックで学習が打ち切られています.
そこで少し疑問に思い質問です.
結局は最終エポック目がそのモデルの精度となるので,この場合のモデルはval_loss: 0.0800として生成されてしまうと思います.
ベストスコアが15エポック目のval_loss: 0.0500であるのに対して,patienceを設定することで,それよりも先(今回であれば18エポック目)のlossやaccuracyの値が悪いところで学習を止めてしまうと,その分精度の劣るモデルになってしまうと思うのですが…どうなんでしょう.
理想としては,この場合はval_loss: 0.0500とするモデルを作成したいのです.
早期かつ一番精度のいい状態で学習を停止してくれるライブラリ,またはそのような方法があれば教えていただきたいです.
よろしくお願いします.
補足情報(FW/ツールのバージョンなど)
ubuntu 20.04
Python 3.8.10
tensorflow-gpu 2.5.3
keras 2.8.0
numpy 1.19.5
jupyter lab 2.3.2

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/15 00:58
2022/07/15 08:21