pytorch 實現(xiàn)在測試的時候啟用dropout
我們知道,dropout一般都在訓練的時候使用,那么測試的時候如何也開啟dropout呢?
在pytorch中,網(wǎng)絡有train和eval兩種模式,在train模式下,dropout和batch normalization會生效,而val模式下,dropout不生效,bn固定參數(shù)。
想要在測試的時候使用dropout,可以把dropout單獨設為train模式,這里可以使用apply函數(shù):
def apply_dropout(m): if type(m) == nn.Dropout: m.train()
下面是完整demo代碼:
# coding: utf-8 import torch import torch.nn as nn import numpy as np class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc = nn.Linear(8, 8) self.dropout = nn.Dropout(0.5) def forward(self, x): x = self.fc(x) x = self.dropout(x) return x net = SimpleNet() x = torch.FloatTensor([1]*8) net.train() y = net(x) print('train mode result: ', y) net.eval() y = net(x) print('eval mode result: ', y) net.eval() y = net(x) print('eval2 mode result: ', y) def apply_dropout(m): if type(m) == nn.Dropout: m.train() net.eval() net.apply(apply_dropout) y = net(x) print('apply eval result:', y)
運行結(jié)果:
可以看到,在eval模式下,由于dropout未生效,每次跑的結(jié)果不同,利用apply函數(shù),將Dropout單獨設為train模式,dropout就生效了。
補充:Pytorch之dropout避免過擬合測試
一.做數(shù)據(jù)
二.搭建神經(jīng)網(wǎng)絡
三.訓練
四.對比測試結(jié)果
注意:測試過程中,一定要注意模式切換
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持本站。
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。