解决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快速排序代码实例
Nov 21 Python
python中reduce()函数的使用方法示例
Sep 29 Python
python 编码规范整理
May 05 Python
python实现C4.5决策树算法
Aug 29 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
vscode调试django项目的方法
Aug 06 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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中防止SQL注入实现代码
2011/02/19 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python中List.count()方法的使用教程
2015/05/20 Python
利用python发送和接收邮件
2016/09/27 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python中turtle作图示例
2017/11/15 Python
Python实现的特征提取操作示例
2018/12/03 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
行政人事岗位职责
2014/03/17 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
用Python创建简易网站图文教程
2021/06/11 Python
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python