聊聊pytorch测试的时候为何要加上model.eval()


Posted in Python onMay 23, 2021

Do need to use model.eval() when I test?

Sure, Dropout works as a regularization for preventing overfitting during training.

It randomly zeros the elements of inputs in Dropout layer on forward call.

It should be disabled during testing since you may want to use full model (no element is masked)

使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大!!!!!!

补充:pytorch中model eval和torch no grad()的区别

model.eval()和with torch.no_grad()的区别

在PyTorch中进行validation时,会使用model.eval()切换到测试模式,在该模式下,

主要用于通知dropout层和batchnorm层在train和val模式间切换

在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。

在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反传(backprobagation)

而with torch.no_grad()则主要是用于停止autograd模块的工作,以起到加速和节省显存的作用,具体行为就是停止gradient计算,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。

使用场景

如果不在意显存大小和计算时间的话,仅仅使用model.eval()已足够得到正确的validation的结果;而with torch.zero_grad()则是更进一步加速和节省gpu空间(因为不用计算和存储gradient),从而可以更快计算,也可以跑更大的batch来测试。

补充:Pytorch的modle.train,model.eval,with torch.no_grad的个人理解

1. 最近在学习pytorch过程中遇到了几个问题

不理解为什么在训练和测试函数中model.eval(),和model.train()的区别,经查阅后做如下整理

一般情况下,我们训练过程如下:

1、拿到数据后进行训练,在训练过程中,使用

model.train():告诉我们的网络,这个阶段是用来训练的,可以更新参数。

2、训练完成后进行预测,在预测过程中,使用

model.eval() : 告诉我们的网络,这个阶段是用来测试的,于是模型的参数在该阶段不进行更新。

2. 但是为什么在eval()阶段会使用with torch.no_grad()?

查阅相关资料:传送门

with torch.no_grad - disables tracking of gradients in autograd.

model.eval() changes the forward() behaviour of the module it is called upon

eg, it disables dropout and has batch norm use the entire population statistics

总结一下就是说,在eval阶段了,即使不更新,但是在模型中所使用的dropout或者batch norm也就失效了,直接都会进行预测,而使用no_grad则设置让梯度Autograd设置为False(因为在训练中我们默认是True),这样保证了反向过程为纯粹的测试,而不变参数。

另外,参考文档说这样避免每一个参数都要设置,解放了GPU底层的时间开销,在测试阶段统一梯度设置为False

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

Python 相关文章推荐
python读文件逐行处理的示例代码分享
Dec 27 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
PyQt5每天必学之事件与信号
Apr 20 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 Python
解决yum对python依赖版本问题
Jul 05 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
使用python3 实现插入数据到mysql
Mar 02 Python
Python词云的正确实现方法实例
May 08 Python
PyTorch 如何自动计算梯度
May 23 #Python
解决numpy和torch数据类型转化的问题
May 23 #Python
Python 用户输入和while循环的操作
May 23 #Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 #Python
python tkinter Entry控件的焦点移动操作
May 22 #Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 #Python
tensorboard 可视化之localhost:6006不显示的解决方案
You might like
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
vue实现分页组件
2020/06/16 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python 实现插入排序算法
2012/06/05 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
python多任务之协程的使用详解
2019/08/26 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
python实现串口通信的示例代码
2020/02/10 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
移动通信行业实习自我鉴定
2013/09/28 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
18岁生日感言
2014/01/12 职场文书
服装店营销方案
2014/03/10 职场文书
二年级评语大全
2014/04/23 职场文书
协议书范本
2014/04/23 职场文书
个人工作主要事迹
2014/05/08 职场文书
室内设计专业自荐信
2014/05/31 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书