这篇教程pytorch 实现在测试的时候启用dropout写得很实用,希望能帮到您。 我们知道,dropout一般都在训练的时候使用,那么测试的时候如何也开启dropout呢? 在pytorch中,网络有train和eval两种模式,在train模式下,dropout和batch normalization会生效,而val模式下,dropout不生效,bn固定参数。 想要在测试的时候使用dropout,可以把dropout单独设为train模式,这里可以使用apply函数: def apply_dropout(m): if type(m) == nn.Dropout: m.train() 下面是完整demo代码:# coding: utf-8import torchimport torch.nn as nnimport numpy as npclass 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 xnet = 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) 运行结果: 
可以看到,在eval模式下,由于dropout未生效,每次跑的结果不同,利用apply函数,将Dropout单独设为train模式,dropout就生效了。 补充:Pytorch之dropout避免过拟合测试 一.做数据

二.搭建神经网络

三.训练
四.对比测试结果注意:测试过程中,一定要注意模式切换 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。 使用Python脚本对GiteePages进行一键部署的使用说明 Python开发之QT解决无边框界面拖动卡屏问题(附带源码) |