pytorch 實(shí)現(xiàn)在測(cè)試的時(shí)候啟用dropout
我們知道,dropout一般都在訓(xùn)練的時(shí)候使用,那么測(cè)試的時(shí)候如何也開(kāi)啟dropout呢?
在pytorch中,網(wǎng)絡(luò)有train和eval兩種模式,在train模式下,dropout和batch normalization會(huì)生效,而val模式下,dropout不生效,bn固定參數(shù)。
想要在測(cè)試的時(shí)候使用dropout,可以把dropout單獨(dú)設(shè)為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)
運(yùn)行結(jié)果:
可以看到,在eval模式下,由于dropout未生效,每次跑的結(jié)果不同,利用apply函數(shù),將Dropout單獨(dú)設(shè)為train模式,dropout就生效了。
補(bǔ)充:Pytorch之dropout避免過(guò)擬合測(cè)試
一.做數(shù)據(jù)
二.搭建神經(jīng)網(wǎng)絡(luò)
三.訓(xùn)練
四.對(duì)比測(cè)試結(jié)果
注意:測(cè)試過(guò)程中,一定要注意模式切換
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
DjangoUeditor圖片不顯示img的src沒(méi)有域名問(wèn)題
在使用DjangoUeditor過(guò)程中,可能遇到圖片上傳后不顯示問(wèn)題,解決辦法是修改源碼view.py,加入代碼使得保存的圖片URL帶有協(xié)議和域名,具體做法是在保存圖片代碼中添加request.scheme獲取協(xié)議,request.META['HTTP_HOST']獲取域名2024-09-09用python畫(huà)個(gè)奧運(yùn)五環(huán)(附完整代碼)
大家好,本篇文章主要講的是用python畫(huà)個(gè)奧運(yùn)五環(huán)(附完整代碼),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-01-01Python任務(wù)調(diào)度模塊APScheduler使用
這篇文章主要介紹了Python任務(wù)調(diào)度模塊APScheduler使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python判斷一個(gè)集合是否為另一個(gè)集合的子集方法
下面小編就為大家分享一篇python判斷一個(gè)集合是否為另一個(gè)集合的子集方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05