解决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 相关文章推荐
django连接mysql配置方法总结(推荐)
Aug 18 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
基于Django实现日志记录报错信息
Dec 17 Python
python数据类型可变不可变知识点总结
Mar 06 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
仅用几行Python代码就能复制她的U盘文件?
Jun 26 Python
python单向链表实例详解
May 25 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提示undefined index的几种解决方法
2012/05/21 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Python抓取框架 Scrapy的架构
2016/08/12 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
基于django传递数据到后端的例子
2019/08/16 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python dataframe NaN处理方式
2019/12/26 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
如何利用python发送邮件
2020/09/26 Python
枚举与#define宏的区别
2014/04/30 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
酒店公关部经理岗位职责
2013/11/24 职场文书
和平主题的演讲稿
2014/01/12 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
校运会宣传稿大全
2015/07/23 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android