新手,matlab搭的cnn,loss收斂的,但此時訓練集誤差依然很大,調節學習率,層數,卷積核等,依然這樣,而且最後收斂到的數值都差不多,誤差也差不多,這是局部最優嗎?是什麼問題


很可能是欠擬合了。有可能是以下幾個原因導致的:

1.模型太過簡單,無法繼續更新參數對數據分類

可以考慮加深神經網路的層數,或者直接採用更深的網路進行訓練,比如vggnet、resnet或者densenet

2.訓練集數據量太小

如果能獲取到更多數據當然最好,如果不能的話可以採用數據增強的方法擴充已有數據集

3.損失函數選取不當

對於二分類問題,二進位交叉熵函數是很好的選擇。而對於多分類問題可以採用softmax損失函數。如果問題很簡單的話也可以採用均方誤差作為損失函數


可以按照下列步驟一步一步診斷原因

如果網路難以擬合訓練集,首先請不要使用對抗過擬合的方法實驗網路能否擬合訓練集。即不要使用數據增強,不要使用正則化。只從訓練集中抽出一小部分數據訓練。主要測試網路是否能夠過擬合這一小部分數據集。如果不能,說明代碼網路實現有bug或者網路結構過於簡單。請檢查bug或者換用更複雜的模型。

如果網路能夠擬合這一部分數據集,可以把所有數據加入,但是仍然不要使用任何對抗過擬合的方法。測試是否能夠擬合所有訓練數據。如果不能,可以考慮換用更大的模型嘗試。

如果上面都、沒有問題。便可以加入數據增強,如果加入數據增強後,網路欠擬合,說明數據增強有bug或者數據增強破壞了訓練數據的語義信息。這個時候,把通過數據增強生成的樣本保存下來,肉眼觀察你是否能夠通過數據增強產生的樣本做出正確的判斷。如果不能,請去除不合適的數據增強方法。

之後可以加入其他防止神經網路過擬合的方法。例如正則化。有時候,使用了正則化,會導致網路欠擬合。


這個問題,我覺得現在有資格回答了

目前在做本科畢設,目標檢測方向,基礎模型用的ssd。一開始我也覺得訓練收斂loss應該很小,趨近於0,後來請教導師知道loss穩定就好,loss值趨近多少問題不大。

當然這是全部都正常的情況。

還有就是模型太小導致欠擬合,可以增加網路深度

另外的就是樣本量太小,訓練的不夠。這個樣本量指的是參與到網路訓練中的樣本量,我在做rpn網路給分類器提供樣本的時候代碼寫錯 導致分類器的訓練樣本變少。

我覺得還有微小的可能就是優化器和學習率的設定問題,還是adam香一些


1. 收斂並不是重點,收斂後模型繼續優化,準確度還會繼續提高。

2. 訓練方法對嘛?代碼對嗎?有沒有寫錯?


模型複雜度不夠或者數據太少


推薦閱讀:
相关文章