聊聊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中的继承和多态的概念
Apr 27 Python
Python ftp上传文件
Feb 13 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
解决Django中checkbox复选框的传值问题
Mar 31 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
详解Python当中的字符串和编码
2015/04/25 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Python之字典添加元素的几种方法
2020/09/30 Python
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
过滤器的用法
2013/10/08 面试题
人事主管岗位职责范本
2013/12/04 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
家长会邀请书
2014/01/25 职场文书
服务理念标语
2014/06/18 职场文书
全运会口号
2014/06/20 职场文书
尊师重教主题班会
2015/08/14 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书