Keras EarlyStopping

from keras.callbacks import EarlyStopping, ModelCheckpoint

 

es = EarlyStopping(monitor='val_loss', patience=2, restore_best_weights=True)

 

爲了獲得性能良好的神經網絡,網絡定型過程中需要進行許多關於所用設置(超參數)的決策。超參數之一是定型週期(epoch)的數量:亦即應當完整遍歷數據集多少次(一次爲一個epoch)?如果epoch數量太少,網絡有可能發生欠擬合(即對於定型數據的學習不夠充分);如果epoch數量太多,則有可能發生過擬合(即網絡對定型數據中的“噪聲”而非信號擬合)。

早停法旨在解決epoch數量需要手動設置的問題。它也可以被視爲一種能夠避免網絡發生過擬合的正則化方法(與L1/L2權重衰減和丟棄法類似)。

目的還是解決過擬合!

========================================================

使用該函數的目的是爲了防止過擬合,因爲在我們訓練模型的過程中,很有可能出現過擬合的情況。這個時候訓練集表現很好,但是驗證集表現就會下降。這時候我們需要提前結束訓練,得到“最佳”(只能判斷是在全局範圍內最佳)的結果。

EarlyStopping(monitor='val_loss', min_delta=0,
 patience=10, verbose=2, mode='auto', restore_best_weights=True)

對於參數的解釋

monitor: 監控的變量,例如 val_acc,val_loss。如果要保存最高的精度,則應將檢查點設置爲monitor =’val_acc’,它將自動以最高的精度保存.最低的損耗不一定與最高的精度相對應
min_delta: monitor的最小變化,如果絕對值小於min_delta,則可以看作對於結果沒有improvement,默認爲0。
patience: 沒有改善的epoch數。比如例子中爲10次內都沒有改變。
verbose:日誌顯示
    verbose = 0 爲不在標準輸出流輸出日誌信息
    verbose = 1 爲輸出進度條記錄
    verbose = 2 爲每個epoch輸出一行記錄

mode: auto, min, max三者之一. 在最小模式下,當監控量停止下降時,培訓將停止; 在最大模式下,當監控量停止增加時,它將停止; 在自動模式下,從監控數量的名稱自動推斷方向。
restore_best_weights: 若爲True,將會取整個訓練過程中最佳監控值的epoch訓練結果作爲最終模型權值,否則將以最後一次epoch的結果作爲最終模型權值。

 

優缺點



雖然早停法簡單易懂,也很好操作,但是也存在很大的缺陷。比如當模型劇烈波動的時候可能會停的太早,以至於不能得到想要的“好結果”。另外由於原理過於簡單,對於複雜的問題往往統一用一種方式進行評判,也不能很好的得到恰當的結論。
除了使用早停法防止過擬合,還有一種方法爲正則化方法,詳見深入理解L1、L2正則化
——
鏈接:https://blog.csdn.net/I_canjnu/article/details/106034367

 

========================================================

tf.keras.callbacks.EarlyStopping函數

類 EarlyStopping

繼承自: Callback

定義在:tensorflow/python/keras/callbacks.py。

當監測數量停止改善時停止訓練。

參數:

  • monitor:要監測的數量。
  • min_delta:在被監測的數據中被認爲是提升的最小變化,即絕對變化小於min_delta,將被視爲沒有提升。
  • patience:沒有進步的訓練輪數,在這之後訓練就會被停止。
  • verbose:詳細信息模式。
  • mode:{"auto", "min", "max"}其中之一。在min模式中,當監測的數量停止減少時,訓練將停止;在max模式下,當監測的數量停止增加時,它將停止;在auto模式下,從監測數量的名稱自動推斷方向。
  • baseline:受監測的數量的基線值。如果模型沒有顯示基線的改善,訓練將停止。
  • restore_best_weights:是否從具有監測數量的最佳值的時期恢復模型權重。如果爲False,則使用在訓練的最後一步獲得的模型權重。

========================================================

callback = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3)
# This callback will stop the training when there is no improvement in
# the loss for three consecutive epochs.
model = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
model.compile(tf.keras.optimizers.SGD(), loss='mse')
history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
                    epochs=10, batch_size=1, callbacks=[callback],
                    verbose=0)
len(history.history['loss'])  # Only 4 epochs are run.

 

========================================================

https://keras.io/api/models/model_training_apis/#fit-method

https://www.w3cschool.cn/tensorflow_python/tf_keras_callbacks_EarlyStopping.html

http://www.manongjc.com/detail/30-hkzupqpqsmqjvvd.html

========================================================

 

 

========================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章