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


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

