訓練及loss以及測試集loss之間關係

2021-08-23 14:41:41 字數 1797 閱讀 9332

train loss 不斷下降,test loss不斷下降,說明網路仍在學習;

train loss 不斷下降,test loss趨於不變,說明網路過擬合;

train loss 趨於不變,test loss不斷下降,說明資料集100%有問題;

train loss 趨於不變,test loss趨於不變,說明學習遇到瓶頸,需要減小學習率或批量數目;

train loss 不斷上公升,test loss不斷上公升,說明網路結構設計不當,訓練超引數設定不當,資料集經過清洗等問題。

二,這個比較長,比較完整loss和神經網路訓練

有1.梯度檢驗2.訓練前檢查,3.訓練中監控4.首層視覺化5.模型融合和優化等等等

三,四,

這段在使用caffe的時候遇到了兩個問題都是在訓練的過程中loss基本保持常數值,特此記錄一下。

loss等於87.33這個問題是在對inception-v3網路不管是fine-tuning還是train的時候遇到的,無論網路迭代多少次,網路的loss一直保持恆定。

查閱相關資料以後發現是由於loss的最大值由flt_min計算得到,flt_min是其對應的自然對數正好是-87.3356,這也就對應上了loss保持87.3356了。

這說明softmax在計算的過程中得到了概率值出現了零,由於softmax是用指數函式計算的,指數函式的值都是大於0的,所以應該是計算過程中出現了float溢位的異常,也就是出現了inf,nan等異常值導致softmax輸出為0.

當softmax之前的feature值過大時,由於softmax先求指數,會超出float的資料範圍,成為inf。inf與其他任何數值的和都是inf,softmax在做除法時任何正常範圍的數值除以inf都會變成0.然後求loss就出現了87.3356的情況。

解決辦法

由於softmax輸入的feature由兩部分計算得到:一部分是輸入資料,另一部分是各層的權值等組成

減小初始化權重,以使得softmax的輸入feature處於乙個比較小的範圍

降低學習率,這樣可以減小權重的波動範圍

如果有bn(batch normalization)層,finetune時最好不要凍結bn的引數,否則資料分布不一致時很容易使輸出值變得很大(注意將batch_norm_param中的use_global_stats設定為false)。

觀察資料中是否有異常樣本或異常label導致資料讀取異常

本文遇到的情況採用降低學習率的方法,learning rate設定為0.01或者原來loss的或者。

採用vgg-16在做乙個二分類問題,所以計算loss時等價與下面的公式:

當p=0.5時,loss正好為0.693147,也就是訓練過程中,無論如何調節網路都不收斂。最初的網路配置檔案卷積層的引數如下所示:

從vgg-16訓練好的模型進行fine-tuning也不發生改變,當在網路中加入初始化引數和decay_mult以後再次訓練網路開始收斂。

但是具體是什麼原因造成的,暫時還沒有找到,難道是初始化引數的問題還是?

loss一直不下降的原因有很多,可以從頭到尾濾一遍: 1)資料的輸入是否正常,data和label是否一致。 2)網路架構的選擇,一般是越深越好,也分資料集。 並且用不用在大資料集上pre-train的引數也很重要的 3)loss 對不對。

具體到語音,很多是把audio轉成頻譜圖送給cnn訓練。

nips16 有個soundnet(torch的code),語音分類的performance很高,我覺得可以用來初始化你的model 引數, 可以參考下。

訓練集 測試集loss容易出現的問題總結

1 train loss 不斷下降,test loss不斷下降 說明網路仍在學習 train loss 不斷下降,test loss趨於不變 說明網路過擬合 train loss 趨於不變,test loss不斷下降 說明資料集100 有問題 train loss 趨於不變,test loss趨於不...

將資料集劃分為訓練集以及測試集

將資料集簡單地劃分為測試集以及訓練集 import os import random train percent 9 訓練集所佔比例 valid percent 0.1 測試集所佔比例 xmlfilepath data delete 所在地相對路徑 total file os.listdir xml...

神經網路訓練中的訓練集 驗證集以及測試集合

1 在nn訓練中我們很常用的是訓練集合以及測試集合,在訓練集合上訓練模型 我個人認為模型就是訓練的方法以及對應的引數值,更偏重於引數值吧 訓練好之後拿到測試集合上驗證模型的泛華 就是該模型可以拿去實戰的效果 的能力。2 但是對於上述情況,舉個例子,比如是在訓練乙個多層網路,我們用類似minfunc的...