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中__slots__用法实例
Jun 04 Python
Python base64编码解码实例
Jun 21 Python
Python3 中文文件读写方法
Jan 23 Python
Python求解任意闭区间的所有素数
Jun 10 Python
python发送告警邮件脚本
Sep 17 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
Python 单例设计模式用法实例分析
Sep 23 Python
Django 框架模型操作入门教程
Nov 05 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
python中的对数log函数表示及用法
Dec 09 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
PyTorch 实现L2正则化以及Dropout的操作
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
You might like
我的论坛源代码(九)
2006/10/09 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
javascript call方法使用说明
2010/01/11 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
Django如何自定义分页
2018/09/25 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
如何利用python进行时间序列分析
2020/08/04 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
中间件的定义
2016/08/09 面试题
大国崛起日本观后感
2015/06/02 职场文书
消夏晚会主持词
2015/06/30 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
ipad隐藏软件app图标方法
2022/04/19 数码科技
win10搭建配置ftp服务器的方法
2022/08/05 Servers
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS