解决Pytorch中关于model.eval的问题


Posted in Python onMay 22, 2021

有时候使用Pytorch训练完模型,在测试数据上面得到的结果令人大跌眼镜。

这个时候需要检查一下定义的Model类中有没有 BN 或 Dropout 层,如果有任何一个存在

那么在测试之前需要加入一行代码:

#model是实例化的模型对象
model = model.eval()

表示将模型转变为evaluation(测试)模式,这样就可以排除BN和Dropout对测试的干扰。

因为BN和Dropout在训练和测试时是不同的:

对于BN,训练时通常采用mini-batch,所以每一批中的mean和std大致是相同的;而测试阶段往往是单个图像的输入,不存在mini-batch的概念。所以将model改为eval模式后,BN的参数固定,并采用之前训练好的全局的mean和std;

对于Dropout,训练阶段,隐含层神经元先乘概率P,再进行激活;而测试阶段,神经元先激活,每个隐含层神经元的输出再乘概率P。

如下图所示:

解决Pytorch中关于model.eval的问题

补充:pytorch中model.eval之后是否还需要model.train的问题

答案是:需要的

正确的写法是

解决Pytorch中关于model.eval的问题

for循环之后再开启train,

循环之后的评估model.eval之后就会再次回到model.train

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

Python 相关文章推荐
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
python运行时间的几种方法
Jun 17 Python
老生常谈Python进阶之装饰器
May 11 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python中遍历列表的方法总结
Jun 27 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
python常用运维脚本实例小结
Feb 14 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
python 第三方库paramiko的常用方式
Feb 20 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 #Python
对PyTorch中inplace字段的全面理解
May 22 #Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 #Python
用python实现监控视频人数统计
Python基础之进程详解
如何在C++中调用Python
May 21 #Python
python 定义函数 返回值只取其中一个的实现
May 21 #Python
You might like
PHP 观察者模式的实现代码
2013/05/10 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php微信开发之谷歌测距
2018/06/14 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
python如何统计序列中元素
2020/07/31 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
学习礼仪心得体会
2014/09/01 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
银行求职信怎么写
2019/06/20 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
MySQL Router的安装部署
2021/04/24 MySQL
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
阿里云日志过滤器配置日志服务
2022/04/09 Servers