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
========================================================
========================================================