聊聊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执行系统命令的常见方法(全)
Oct 22 Python
Python list操作用法总结
Nov 10 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
Python做智能家居温湿度报警系统
Sep 25 Python
python scp 批量同步文件的实现方法
Jan 03 Python
python调用自定义函数的实例操作
Jun 26 Python
Python 实现数组相减示例
Dec 27 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
JAVA/JSP学习系列之六
2006/10/09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
php查询及多条件查询
2017/02/26 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
webpack之引入图片的实现及问题
2018/10/08 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
Python列表计数及插入实例
2014/12/17 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
学习两会精神心得范文
2014/03/17 职场文书
就业意向书范文
2014/04/01 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技