最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

踩坑:pytorch中eval模式下結(jié)果遠差于train模式介紹

 更新時間:2020年06月23日 08:49:04   作者:yucong96  
這篇文章主要介紹了踩坑:pytorch中eval模式下結(jié)果遠差于train模式介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

首先,eval模式和train模式得到不同的結(jié)果是正常的。我的模型中,eval模式和train模式不同之處在于Batch Normalization和Dropout。Dropout比較簡單,在train時會丟棄一部分連接,在eval時則不會。Batch Normalization,在train時不僅使用了當(dāng)前batch的均值和方差,也使用了歷史batch統(tǒng)計上的均值和方差,并做一個加權(quán)平均(momentum參數(shù))。在test時,由于此時batchsize不一定一致,因此不再使用當(dāng)前batch的均值和方差,僅使用歷史訓(xùn)練時的統(tǒng)計值。

我出bug的現(xiàn)象是,train模式下可以收斂,但一旦在測試中切換到了eval模式,結(jié)果就很差。如果在測試中仍沿用train模式,反而可以得到不錯的結(jié)果。為了確保是程序bug而不是算法本身就不適合于預(yù)測,我在測試時再次使用了訓(xùn)練集,正常情況下此時應(yīng)發(fā)生過擬合,正確率一定會很高,然而eval模式下正確率仍然很低。參照網(wǎng)上的一些說法(Performance highly degraded when eval() is activated in the test phase
),我調(diào)大了batchsize,降低了BN層的momentum,檢查了是否存在不同層使用相同BN層的bug,均不見效。有一種方法說應(yīng)在BN層設(shè)置track_running_stats為False,它雖然帶來了好的效果,但實際上它只不過是不用eval模式,切回train模式罷了,所以也不對。

學(xué)習(xí)了在訓(xùn)練過程中,如何將BN層中統(tǒng)計的均值和方差輸出。即在forward()中,

# bn是一個BN層,torch.nn.batch_normalization(...)
print(bn.running_mean)
print(bn.running_var)

同時學(xué)習(xí)了如何輸出一個Tensor自身的均值和方差,即

# x是一個Tensor,dims是需要計算的維度
print(x.cpu().detach().numpy().mean(dims)
print(x.cpu().detach().numpy().var(dims)

觀察每一層的輸出結(jié)果,發(fā)現(xiàn)出現(xiàn)了很大的方差,才猛然意識到自己的輸入數(shù)據(jù)沒有做歸一化(事后想想也確實如此,畢竟模型和訓(xùn)練方法都是github上參考別人的,出錯概率很?。环炊亲约簩懙腄ataSet部分,其實是最容易出錯的)。給模型加上歸一化后,eval和train的結(jié)果就沒有問題了。

再次驗證了我的觀點:越是玄學(xué)的問題,越是傻逼的bug。

補充知識:Pytorch中的train和eval用法注意點

1.介紹

一般情況,model.train()是在訓(xùn)練的時候用到,model.eval()是在測試的時候用到

2.用法

如果模型中沒有類似于BN這樣的歸一化或者Dropout,model.train()和model.eval()可以不要(建議寫一下,比較安全),并且model.train()和model.eval()得到的效果是一樣

如果模型中有類似于BN這樣的歸一化或者Dropout,并且程序需要邊訓(xùn)練和邊測試,最好就是用model.eval()測試完之后,后面補一個model.train()。

其中model.train()是保證BN用每一批數(shù)據(jù)的均值和方差,而model.eval()是保證BN用全部訓(xùn)練數(shù)據(jù)的均值和方差;而對于Dropout,model.train()是隨機取一部分網(wǎng)絡(luò)連接來訓(xùn)練更新參數(shù),而model.eval()是利用到了所有網(wǎng)絡(luò)連接(結(jié)果是取了平均)

以上這篇踩坑:pytorch中eval模式下結(jié)果遠差于train模式介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

油尖旺区| 西平县| 北京市| 海盐县| 长泰县| 益阳市| 永吉县| 刚察县| 灵寿县| 芦山县| 金溪县| 长丰县| 青阳县| 石阡县| 西和县| 彝良县| 建阳市| 曲周县| 来凤县| 宣武区| 上蔡县| 靖州| 若尔盖县| 金湖县| 云和县| 花垣县| 鸡东县| 柘城县| 阿坝| 晋江市| 唐海县| 柳河县| 平潭县| 镇宁| 寻乌县| 开封县| 澄江县| 长乐市| 格尔木市| 明星| 蒙山县|