PyTorch dropout设置训练和测试模式的实现


Posted in Python onMay 27, 2021

看代码吧~

class Net(nn.Module):
…
model = Net()
…
model.train() # 把module设成训练模式,对Dropout和BatchNorm有影响
model.eval() # 把module设置为预测模式,对Dropout和BatchNorm模块有影响

补充:Pytorch遇到的坑——训练模式和测试模式切换

由于训练的时候Dropout和BN层起作用,每个batch BN层的参数不一样,dropout在训练时随机失效点具有随机性,所以训练和测试要区分开来。

使用时切记要根据实际情况切换:

model.train()
model.eval()

补充:Pytorch在测试与训练过程中的验证结果不一致问题

引言

今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval()顺序问题。

现象

此前的错误代码是

input_cpu = torch.ones((1, 2, 160, 160))
    target_cpu =torch.ones((1, 2, 160, 160))
    target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda()
    model.set_input_2(input_gpu, target_gpu)
    model.eval()
    model.forward()

应该改为

input_cpu = torch.ones((1, 2, 160, 160))
    target_cpu =torch.ones((1, 2, 160, 160))
    target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda()
    model.set_input_2(input_gpu, target_gpu)
    # 先forward再eval
    model.forward()
    model.eval()

当时有个疑虑,为什么要在forward后面再加eval(),查了下相关资料,主要是在BN层以及Dropout的问题。当使用eval()时,模型会自动固定BN层以及Dropout,选取训练好的值,否则则会取平均,可能导致生成的图片颜色失真。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python列表与元组详解实例
Nov 01 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
浅谈python中requests模块导入的问题
May 18 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
python字符串和常用数据结构知识总结
May 21 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
python实现飞行棋游戏
Feb 05 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
Python 代码调试技巧示例代码
Aug 11 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 Python
Python天气语音播报小助手
Sep 25 Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
PyTorch 实现L2正则化以及Dropout的操作
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
You might like
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
PHP 实现链式操作
2021/03/09 PHP
JS替换文本域内的回车示例
2014/02/18 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python list转置和前后反转的例子
2019/08/26 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
简短证婚人证婚词
2014/01/09 职场文书
社区国庆节活动方案
2014/02/05 职场文书
人事专员职责
2014/02/22 职场文书
初二学习计划书范文
2014/04/27 职场文书
城管大队整治方案
2014/05/06 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
Redis分布式锁Redlock的实现
2021/08/07 Redis
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android