PyTorch dropout設(shè)置訓(xùn)練和測(cè)試模式的實(shí)現(xiàn)
看代碼吧~
class Net(nn.Module): … model = Net() … model.train() # 把module設(shè)成訓(xùn)練模式,對(duì)Dropout和BatchNorm有影響 model.eval() # 把module設(shè)置為預(yù)測(cè)模式,對(duì)Dropout和BatchNorm模塊有影響
補(bǔ)充:Pytorch遇到的坑——訓(xùn)練模式和測(cè)試模式切換
由于訓(xùn)練的時(shí)候Dropout和BN層起作用,每個(gè)batch BN層的參數(shù)不一樣,dropout在訓(xùn)練時(shí)隨機(jī)失效點(diǎn)具有隨機(jī)性,所以訓(xùn)練和測(cè)試要區(qū)分開(kāi)來(lái)。
使用時(shí)切記要根據(jù)實(shí)際情況切換:
model.train() model.eval()
補(bǔ)充:Pytorch在測(cè)試與訓(xùn)練過(guò)程中的驗(yàn)證結(jié)果不一致問(wèn)題
引言
今天在使用Pytorch導(dǎo)入此前保存的模型進(jìn)行測(cè)試,在過(guò)程中發(fā)現(xiàn)輸出的結(jié)果與驗(yàn)證結(jié)果差距甚大,經(jīng)過(guò)排查后發(fā)現(xiàn)是forward與eval()順序問(wèn)題。
現(xiàn)象
此前的錯(cuò)誤代碼是
input_cpu = torch.ones((1, 2, 160, 160)) target_cpu =torch.ones((1, 2, 160, 160)) target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda() model.set_input_2(input_gpu, target_gpu) model.eval() model.forward()
應(yīng)該改為
input_cpu = torch.ones((1, 2, 160, 160)) target_cpu =torch.ones((1, 2, 160, 160)) target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda() model.set_input_2(input_gpu, target_gpu) # 先f(wàn)orward再eval model.forward() model.eval()
當(dāng)時(shí)有個(gè)疑慮,為什么要在forward后面再加eval(),查了下相關(guān)資料,主要是在BN層以及Dropout的問(wèn)題。當(dāng)使用eval()時(shí),模型會(huì)自動(dòng)固定BN層以及Dropout,選取訓(xùn)練好的值,否則則會(huì)取平均,可能導(dǎo)致生成的圖片顏色失真。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一篇文章入門(mén)Python生態(tài)系統(tǒng)(Python新手入門(mén)指導(dǎo))
原文寫(xiě)于2011年末,雖然文中關(guān)于Python 3的一些說(shuō)法可以說(shuō)已經(jīng)不成立了,但是作為一篇面向從其他語(yǔ)言轉(zhuǎn)型到Python的程序員來(lái)說(shuō),本文對(duì)Python的生態(tài)系統(tǒng)還是做了較為全面的介紹2015-12-12Python中函數(shù)調(diào)用9大方法小結(jié)
在Python中,函數(shù)是一種非常重要的編程概念,它們使得代碼模塊化、可重用,并且能夠提高代碼的可讀性,本文將深入探討Python函數(shù)調(diào)用的9種方法,需要的可以參考下2024-01-01現(xiàn)代Python編程的四個(gè)關(guān)鍵點(diǎn)你知道幾個(gè)
這篇文章主要為大家詳細(xì)介紹了Python編程的四個(gè)關(guān)鍵點(diǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02python中精確的浮點(diǎn)數(shù)運(yùn)算示例
這篇文章主要為大家介紹了python中精確的浮點(diǎn)數(shù)運(yùn)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Python StrEnum基本概念和使用場(chǎng)景分析
StrEnum是Python枚舉家族的一個(gè)強(qiáng)大補(bǔ)充,特別適合處理字符串常量,它結(jié)合了枚舉的類(lèi)型安全性和字符串的靈活性,使得在許多場(chǎng)景下的編程變得更加簡(jiǎn)潔和安全,本文將介紹StrEnum的基本概念和使用場(chǎng)景,并通過(guò)示例代碼來(lái)展示它的實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧2024-07-07ruff check文件目錄檢測(cè)--exclude參數(shù)設(shè)置路徑詳解
這篇文章主要為大家介紹了ruff check文件目錄檢測(cè)exclude參數(shù)如何設(shè)置多少路徑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Python創(chuàng)建7種不同的文件格式的方法總結(jié)
今天的這篇文章呢,小編來(lái)介紹一下如何通過(guò)Python來(lái)創(chuàng)建各種形式的文件,這里包括了:文本文件、CSV文件、Excel文件、壓縮文件、XML文件、JSON文件和PDF文件,需要的可以參考一下2023-01-01Python中通過(guò)property設(shè)置類(lèi)屬性的訪問(wèn)
為了達(dá)到類(lèi)似C++類(lèi)的封裝性能,可以使用property來(lái)設(shè)置Python類(lèi)屬性的訪問(wèn)權(quán)限,本文就介紹一下Python中通過(guò)property設(shè)置類(lèi)屬性的訪問(wèn),感興趣的可以了解一下,感興趣的可以了解一下2023-09-09卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展及各模型的優(yōu)缺點(diǎn)及說(shuō)明
這篇文章主要介紹了卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展及各模型的優(yōu)缺點(diǎn)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02