Pytorch中關于BatchNorm2d的參數解釋
BatchNorm2d中的track_running_stats參數
如果BatchNorm2d的參數val,track_running_stats設置False,那么加載預訓練后每次模型測試測試集的結果時都不一樣;
track_running_stats設置為True時,每次得到的結果都一樣。
running_mean和running_var參數
running_mean和running_var參數是根據輸入的batch的統(tǒng)計特性計算的,嚴格來說不算是“學習”到的參數,不過對于整個計算是很重要的。
torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
BatchNorm2d參數講解
一般來說pytorch中的模型都是繼承nn.Module類的,都有一個屬性trainning指定是否是訓練狀態(tài),訓練狀態(tài)與否將會影響到某些層的參數是否是固定的,比如BN層或者Dropout層。通常用model.train()指定當前模型model為訓練狀態(tài),model.eval()指定當前模型為測試狀態(tài)。
同時,BN的API中有幾個參數需要比較關心的,一個是affine指定是否需要仿射,還有個是track_running_stats指定是否跟蹤當前batch的統(tǒng)計特性。容易出現問題也正好是這三個參數:trainning,affine,track_running_stats。
其中的affine指定是否需要仿射,也就是是否需要上面算式的第四個,如果affine=False則γ=1,β=0 \gamma=1,\beta=0γ=1,β=0,并且不能學習被更新。一般都會設置成affine=True。
trainning和track_running_stats,track_running_stats=True表示跟蹤整個訓練過程中的batch的統(tǒng)計特性,得到方差和均值,而不只是僅僅依賴與當前輸入的batch的統(tǒng)計特性。相反的,如果track_running_stats=False那么就只是計算當前輸入的batch的統(tǒng)計特性中的均值和方差了。當在推理階段的時候,如果track_running_stats=False,此時如果batch_size比較小,那么其統(tǒng)計特性就會和全局統(tǒng)計特性有著較大偏差,可能導致糟糕的效果。


總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Django shell調試models輸出的SQL語句方法
今天小編就為大家分享一篇Django shell調試models輸出的SQL語句方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python中從for循環(huán)延申到推導式的具體使用
這篇文章主要介紹了python中從for循環(huán)延申到推導式的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11

