您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:pytorch 实现在测试的时候启用dropout

51自学网 2021-10-30 22:37:23
  python
这篇教程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解决无边框界面拖动卡屏问题(附带源码)
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。