欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

同時學習了如何輸出一個Tensor自身的均值和方差,即

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

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

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

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

1.介紹

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

2.用法

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

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

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

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

相關文章

  • Ubuntu16.04安裝python3.6.5步驟詳解

    Ubuntu16.04安裝python3.6.5步驟詳解

    這篇文章主要介紹了Ubuntu16.04安裝python3.6.5詳細步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Python實現(xiàn)批量識別圖片文字并存為Excel

    Python實現(xiàn)批量識別圖片文字并存為Excel

    批量文字識別是Python辦公自動化的基本操作,應用在我們工作生活中的方方面面。本文主要以開源免費的easyocr來實現(xiàn)批量識別圖片文字并存為Excel,感興趣的可以學習一下
    2022-06-06
  • Python 如何測試文件是否存在

    Python 如何測試文件是否存在

    這篇文章主要介紹了Python 如何測試文件是否存在,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • python更換國內鏡像源三種實用方法

    python更換國內鏡像源三種實用方法

    這篇文章主要給大家介紹了關于python更換國內鏡像源三種實用方法的相關資料,更換Python鏡像源可以幫助解決使用pip安裝包時速度過慢或無法連接的問題,需要的朋友可以參考下
    2023-09-09
  • Tensorflow實現(xiàn)部分參數(shù)梯度更新操作

    Tensorflow實現(xiàn)部分參數(shù)梯度更新操作

    今天小編就為大家分享一篇Tensorflow實現(xiàn)部分參數(shù)梯度更新操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python反反爬蟲技術限制連續(xù)請求時間處理

    python反反爬蟲技術限制連續(xù)請求時間處理

    這篇文章主要為大家介紹了python反反爬蟲技術限制連續(xù)請求時間處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • python實現(xiàn)發(fā)送郵件功能

    python實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)發(fā)送郵件功能,使用的模塊是smtplib、MIMEText,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Python Json數(shù)據(jù)文件操作原理解析

    Python Json數(shù)據(jù)文件操作原理解析

    這篇文章主要介紹了Python Json數(shù)據(jù)文件操作原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 如何用python獲取EXCEL文件內容并保存到DBC

    如何用python獲取EXCEL文件內容并保存到DBC

    很多時候,使用python進行數(shù)據(jù)分析的第一步就是讀取excel文件,下面這篇文章主要給大家介紹了關于如何用python獲取EXCEL文件內容并保存到DBC的相關資料,需要的朋友可以參考
    2023-12-12
  • 如何使用PyCharm將代碼上傳到GitHub上(圖文詳解)

    如何使用PyCharm將代碼上傳到GitHub上(圖文詳解)

    這篇文章主要介紹了如何使用PyCharm將代碼上傳到GitHub上(圖文詳解),文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論