神經網路訓練實踐粗淺心得

2021-10-23 20:13:32 字數 1964 閱讀 1882

實踐過程主要參考了此篇部落格:the number of hidden layersl。

隱藏層先選擇1層,即使用3層神經網路進行訓練。

然後增加1層看看訓練集、測試集等的效果,如果幾乎沒有提公升,那就只在3層基礎上優化吧。

畢竟增加一層,時間效率、成本都需要考慮、

鏈結中給出了3條指導性的原則,那不妨就先採用2/3*輸入輸出層神經元之和作為隱藏層神經元個數。

number of hidden layer neurons:

9 test_precision:

0.9969

number of hidden layer neurons:

21 test_precision:

0.9974

number of hidden layer neurons:

15 test_precision:

0.9971

number of hidden layer neurons:

22 test_precision:

0.9972

number of hidden layer neurons:

8 test_precision:

0.9968

number of hidden layer neurons:

21 test_precision:

0.9974

number of hidden layer neurons:

14 test_precision:

0.9971

number of hidden layer neurons:

10 test_precision:

0.9973

number of hidden layer neurons:

17 test_precision:

0.9971

number of hidden layer neurons:

19 test_precision:

0.9971

我比較習慣用rmsprop、adam和sgd,其實影響最大的還是學習率。

最近研究了下torch.optim.lr_scheduler,其包含了眾多的學習率lr調整策略,如lambdalr,multiplicativelr等,但是我在實際訓練過程中發現,加上這些學習率策略,有時甚至會適得其反。

我這裡採用了一種策略:early_stopping+steplr。

即通過檢查某個metric,如val_loss,當訓練過程中它出現一定次數不再增加(滿足early_stopping條件)時,讓學習率*factor;

設定滿足early_stopping的次數,達到時自動退出訓練。

這樣我認為是比較高效的。

對於訓練資料量比較大,當前使用的計算資源又不太好(如只有cpu),mini-batch sgd確實執行起來 的,而且由於其選擇資料的隨機性,最終的效果也並不差。

在訓練中單獨將訓練結果不正確的樣本抽出來,再以加入一定倍數個數的訓練正確的樣本,將這個新的資料集重新開始訓練。

遺憾的是,發現對最終結果並未有太大提公升。

看來初始訓練結果錯誤的樣本,很有可能是雜訊點。

當前訓練資料集是個四分類任務,簡單對比了下torch.nn.smoothl1loss、smoothl1loss以及bcewithlogitsloss,最後發現bcewithlogitsloss還是相對優秀的。

發現模型中使用了bn之後,資料預處理有沒有加standardscaler,沒有啥影響~

from sklearn.preprocessing import minmaxscaler,standardscaler
[1]

[2] a recipe for training neural networks/

神經網路訓練

學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...

神經網路實踐

inst2vec的實驗中,有許多難以理解的資料處理操作 比如,對資料進行shuffle,對引數進行l2正則化,截斷地產生正態分佈隨機數,對bias置為0,難以理解的原因 取樣上的策略,對為何採用這樣的策略不是很清楚 各種引數的影響 flags的鍋 tensorflow api的影響 tensorfl...

神經網路訓練技巧

1 學習速率。首先設學習速率為乙個較大的值,確保training cost在不斷下降。當accuracyy在n個epoch內不再增加時,使得學習速率減小一半。重複迭代,直到學習速率變成原來的1 1024。2 學習速率要根據訓練cost調。但是網路層數和神經元數目,mini batch size要根據...