我正在使用Keras爲我的項目培訓神經網絡。凱拉斯提供了一個早期停車的功能。我可否知道應該觀察哪些參數以避免我的神經網絡因過早停止而過度配合?Keras提前停止
17
A
回答
32
提早終止基本停止訓練,一旦你的損失開始增加(或者換句話說,驗證準確度開始下降)。根據documents它使用如下:
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
值取決於你的實現(問題,批量大小等),但一般來說,以防止過度配合,我會使用;
- 監視驗證損失(需要使用交叉驗證 或至少火車/試驗組)由
monitor
參數設置爲'val_loss'
。 min_delta
是否在某個時期量化損失的閾值爲 改進與否。如果損失差異低於min_delta
,則量化 沒有改進。最好將它保留爲0,因爲當損失變得更糟時,我們對 感興趣。patience
參數代表一旦你的損失開始增加(停止改進)之前停止的時代的數量。 這取決於具體的實現,如果你使用非常小批量 或大學習率你的損失鋸齒形(準確度會比較吵),所以最好設定一個 大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在評論中指出的那樣,模型的訓練將持續到滿足提前停止條件或epochs
參數(默認值= 10)滿足fit()
。設置提前停止回調不會讓模型訓練超出其epochs
參數。因此,如果調用fit()
函數,則較大的epochs
值將從Early Stopping回調中受益更多。
相關問題
- 1. 提前停止jQuery動畫
- 2. 在Caffe提前停止
- 3. 如何提前停止處理JSP?
- 4. 排序列表(Of T)提前停止
- 5. Ruby嵌套while循環提前停止
- 6. group_concat在mysql查詢提前停止
- 7. 爲XGBoost提前停止設置Tolt
- 8. 做...提前2個月停止?
- 9. 停止當前NSURLConnection
- 10. sklearn.linear_model.LassoLarsIC提早停止
- 11. 的std :: istream_iterator停止前進
- 12. 安裝前停止服務
- 13. 之前停止Scalatest套件
- 14. 鼠標懸停.animate停止之前.animate
- 15. Eclipse調試器在終止前停止
- 16. 停止提供RTC基線
- 17. Android停止提示詞
- 18. Alertify不停止提示
- 19. jQuery.validate停止提交表單
- 20. 停止提交操作
- 21. jQuery停止表單提交
- 22. 工具提示停止mouseMoveEvent
- 23. GridSearchCV - XGBoost - 提早停止
- 24. 如何停止提取?
- 25. JavaScript停止提交表單
- 26. 表 - 停止雙提交
- 27. 早期停止回調在Keras中表現神祕
- 28. 文本自動滾動div停止提前
- 29. 如何實現提前停止作爲擴展
- 30. 即使輸出重定向,Java進程也會提前停止
謝謝,我還是無法理解min delta的定義,從文檔中,min delta被定義爲監控值的最小變化,我可以知道keras是如何定義min監控值的變化的,是指不同的監控值目前的Val損失與之前的Val損失之間? – AizuddinAzman
@AizuddinAzman關閉,'min_delta'是是否將量化監視值的改變作爲改進的閾值。所以是的,如果我們給出'monitor ='val_loss'',那麼它就會涉及當前驗證損失與之前驗證損失之間的差異。在實踐中,如果你給'min_delta = 0.1'小於0.1的驗證丟失(當前 - 前一個)的減少將不會量化,因此將停止訓練(如果你有'耐心= 0')。 – umutto
當val_loss對n_epochs沒有改進時,會降低學習速度嗎?如何做? – mrgloom