模型不收敛
很多同學會發現,為什么我訓練網絡的時候loss一直居高不下或者準確度時高時低,震蕩趨勢,一會到11,一會又0.1,不收斂。 又不知如何解決,博主總結了自己訓練經驗和看到的一些方法。
首先你要保證訓練的次數夠多,不要以為一百兩百次就會一直loss下降或者準確率一直提高,會有一點震蕩的。只要總體收斂就行。若訓練次數夠多(一般上千次,上萬次,或者幾十個epoch)沒收斂,則試試下面方法:
1. 數據和標簽
數據分類標注是否準確?數據是否干凈?數據庫太小一般不會帶來不收斂的問題,只要你一直在train總會收斂(rp問題跑飛了不算)。反而不收斂一般是由于樣本的信息量太大導致網絡不足以fit住整個樣本空間。樣本少只可能帶來過擬合的問題
2. 學習率設定不合理
在自己訓練新網絡時,可以從0.1開始嘗試,如果loss不下降的意思,那就降低,除以10,用0.01嘗試,一般來說0.01會收斂,不行的話就用0.001. 學習率設置過大,很容易震蕩。不過剛剛開始不建議把學習率設置過小,尤其是在訓練的開始階段。在開始階段我們不能把學習率設置的太低否則loss不會收斂。我的做法是逐漸嘗試,從0.1,0.08,0.06,0.05 ......逐漸減小直到正常為止,
有的時候候學習率太低走不出低估,把沖量提高也是一種方法,適當提高mini-batch值,使其波動不大。,
?3.網絡設定不合理
如果做很復雜的分類任務,卻只用了很淺的網絡,可能會導致訓練難以收斂,換網絡換網絡換網絡,重要的事情說三遍,或者也可以嘗試加深當前網絡。
4.數據集label的設置
檢查lable是否有錯,有的時候圖像類別的label設置成1,2,3正確設置應該為0,1,2。
5、改變圖片大小
博主看到一篇文章,說改變圖片大小可以解決收斂問題,具體博主沒試過,只看到有這個方法,具體文章鏈接:https://blog.csdn.net/Fighting_Dreamer/article/details/71498256
感興趣的可以去看看。
6、數據歸一化
神經網絡中對數據進行歸一化是不可忽略的步驟,網絡能不能正常工作,還得看你有沒有做歸一化,一般來講,歸一化就是減去數據平均值除以標準差,通常是針對每個輸入和輸出特征進行歸一化
?
不收斂描述及可能原因分析
不收斂情景1
描述
從訓練開始就一直震蕩或者發散
可能原因
圖片質量極差,人眼幾乎無法識別其中想要識別的特征,對于網絡來說相當于輸入的一直都是噪音數據,比如通過resize的時候,圖片的長寬比改變特別大,使圖片喪失對應特征;或者tfrecord中圖片大小是(m,n),但是讀取的時候,按照(n,m)讀取。所以loss一直震蕩無法收斂
大部分標簽都是對應錯誤的標簽
leaning rate 設置過大
不收斂情景2
描述
訓練開始會有所下降,然后出現發散
可能原因
數據標簽中有錯誤,甚至所有標簽都有一定的錯誤,比如生成的標簽文件格式和讀取標簽時設置的文件格式不一樣,導致讀取的標簽是亂碼;或者為標簽中存在的空格未分配對應的編碼,導致讀取的空格為亂碼(在OCR問題中)
learning rate 設置過大
不收斂情景3
描述
訓練開始會有所下降,然后出現震蕩
可能原因
loss函數中正則化系數設置有問題,或者loss函數本身有問題。比如,在序列化問題中的label_smoothing設置過大,比如設置為0.9,一般設置為0.1即可(OCR問題中)
數據標簽中有錯誤,甚至所有標簽都有一定的錯誤
總結
- 上一篇: 多线程调试
- 下一篇: python读取word