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二分查找算法的递归实现方法
May 12 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
用Eclipse写python程序
Feb 10 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
Python3.5装饰器典型案例分析
Apr 30 Python
Python应用领域和就业形势分析总结
May 14 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
pycharm实现猜数游戏
Dec 07 Python
python字符串的多行输出的实例详解
Jun 08 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
PyTorch 实现L2正则化以及Dropout的操作
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
You might like
PHP提取中文首字母
2008/04/09 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
文本框文本自动补全效果示例分享
2014/01/19 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
python赋值操作方法分享
2013/03/23 Python
python实现简单登陆系统
2018/10/18 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
物业管理专业个人的自我评价
2013/11/19 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
促销活动方案模板
2014/02/24 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
党员剖析材料范文
2014/12/18 职场文书
商务信函英语问候语
2015/11/10 职场文书