您好,登錄后才能下訂單哦!
這篇“model.train()和model.eval()模式怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“model.train()和model.eval()模式怎么使用”文章吧。
pytorch可以給我們提供兩種方式來切換訓練和評估(推斷)的模式,分別是:model.train() 和 model.eval()。
一般用法是:在訓練開始之前寫上 model.trian() ,在測試時寫上 model.eval() 。
在使用 pytorch 構建神經網絡的時候,訓練過程中會在程序上方添加一句model.train(),作用是 啟用 batch normalization 和 dropout 。
如果模型中有BN層(Batch Normalization)和 Dropout ,需要在 訓練時 添加 model.train()。
model.train() 是保證 BN 層能夠用到 每一批數據 的均值和方差。對于 Dropout,model.train() 是 隨機取一部分 網絡連接來訓練更新參數。
model.eval()的作用是 不啟用 Batch Normalization 和 Dropout。
如果模型中有 BN 層(Batch Normalization)和 Dropout,在 測試時 添加 model.eval()。
model.eval() 是保證 BN 層能夠用 全部訓練數據 的均值和方差,即測試過程中要保證 BN 層的均值和方差不變。對于 Dropout,model.eval() 是利用到了 所有 網絡連接,即不進行隨機舍棄神經元。
訓練完 train 樣本后,生成的模型 model 要用來測試樣本了。在 model(test) 之前,需要加上model.eval(),否則的話,有輸入數據,即使不訓練,它也會改變權值。這是 model 中含有 BN 層和 Dropout 所帶來的的性質。
eval() 時,pytorch 會自動把 BN 和 DropOut 固定住,不會取平均,而是用訓練好的值。
不然的話,一旦 test 的 batch_size 過小,很容易就會被 BN 層導致生成圖片顏色失真極大。
eval() 在非訓練的時候是需要加的,沒有這句代碼,一些網絡層的值會發生變動,不會固定,你神經網絡每一次生成的結果也是不固定的,生成質量可能好也可能不好。
也就是說,測試過程中使用model.eval(),這時神經網絡會 沿用 batch normalization 的值,而并 不使用 dropout。
如果模型中有 BN 層(Batch Normalization)和 Dropout,需要在訓練時添加 model.train(),在測試時添加 model.eval()。
其中 model.train() 是保證 BN 層用每一批數據的均值和方差,而 model.eval() 是保證 BN 用全部訓練數據的均值和方差;
而對于 Dropout,model.train() 是隨機取一部分網絡連接來訓練更新參數,而 model.eval() 是利用到了所有網絡連接。
dropout 常常用于抑制過擬合。
設置Dropout時,torch.nn.Dropout(0.5),這里的 0.5 是指該層(layer)的神經元在每次迭代訓練時會隨機有 50% 的可能性被丟棄(失活),不參與訓練。也就是將上一層數據減少一半傳播。
以上就是關于“model.train()和model.eval()模式怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。