怎麼解決過擬合

2021-10-08 03:19:16 字數 1034 閱讀 1589

過擬合主要包括

建模樣本選取有誤。

樣本噪音干擾過大。

假設的模型無法合理存在,或者說是假設成立的條件實際並不成立。

引數太多,模型複雜度過高。

對於神經網路模型:

a) 對樣本資料可能存在分類決策面不唯一,隨著學習的進行,,bp演算法使權值可能收斂過於複雜的決策面;

b) 權值學習迭代次數足夠多(overtraining),擬合了訓練資料中的雜訊和訓練樣例中沒有代表性的特徵。

解決方法主要包括

利用現有深度學習手段增加資料(翻轉,平移,隨機裁剪,imgaug)

利用 dropout層(一般dropout=0.5)

利用正則化,例如需要把rgb值除以255。

l1正則化通過讓原目標函式加上了所有特徵係數絕對值的和來實現正則化,而l2正則化通過讓原目標函式加上了所有特徵係數的平方和來實現正則化。

在分驗證集之前打亂資料

因為validation_split操作不會為你shuffle資料,所以如果你的資料前一半標籤全是1 ,後一半全是0,validation=0.5,則訓練集全是1,驗證集全是0。

檢查是否pycharm的debug模式

如果使用pycharm,除錯模式,會達到損失下降,但是準確率會卡成常數。

檢查資料和標籤沒有對上

有可能再讀取自定義的資料庫的時候出現問題,導致資料與標註不對應。比如第一張用第十張的標註

增加訓練資料

若訓練資料太少,validation資料太多,類別太多,比如4000張訓練,1000張validation,300類,這顯然就是不合理的

最好使用預訓練的權重

大多數流行的backone比如resnet都有再imagenet資料集上與訓練過,那麼使用這種權重,比起隨即重新訓練,顯然要可靠不少

設定weight delay等,在loss中增加正則項(懲罰項,減小不重要的引數對最後結果的影響,網路中有用的權重則不會收到weight decay影響)

使用更簡單的模型,減少網路引數,降低網路結構複雜度

————————————————

參考:

關於怎麼解決過擬合問題

該博文分析了模型訓練過程中三種loss不下降的情況,並給出了一些解決的思路。1 網路層沒有初始化引數 2 超引數設定不合理 2.1 訓練的epoch太少 看到的只是區域性情況,最終要的其實是整體收斂就行,也許訓練100 1000 10000試試?2.2 學習率過高或者過低?合適的學習率可以保證每輪完...

解決過擬合

獲取和使用更多的資料集 對於解決過擬合的辦法就是給與足夠多的資料集,讓模型在更可能多的資料上進行 觀察 和擬合,從而不斷修正自己。然而事實上,收集無限多的資料集幾乎是不可能的,因此乙個常用的辦法就是調整已有的資料,新增大量的 噪音 或者對影象進行銳化 旋轉 明暗度調整等優化。另外補充一句,cnn在影...

防止過擬合以及解決過擬合

過擬合 為了得到一致假設而使假設變得過度複雜稱為過擬合。乙個過配的模型試圖連誤差 噪音 都去解釋 而實際上噪音又是不需要解釋的 導致泛化能力比較差,顯然就過猶不及了。這句話很好的詮釋了過擬合產生的原因,但我認為這只是一部分原因,另乙個原因是模型本身並不能很好地解釋 匹配 資料,也就是說觀測到的資料並...