当前位置:网站首页>pytorch测试的时候为何要加上model.eval()?
pytorch测试的时候为何要加上model.eval()?
2022-08-01 14:55:00 【passion-ma】
很多机器学习的教程都有提到,在使用pytorch进行训练和测试的时候一定要给实例化的model指定eval,那么pytorch测试时为什么要设置model.eval()呢?model.eval()的功能是什么?接下来的这篇文章告诉你。
使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大!!!!!!
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(),和model.train()的区别,经查阅后做如下整理
一般情况下,我们训练过程如下:
1、拿到数据后进行训练,在训练过程中,使用
model.train()
:告诉我们的网络,这个阶段是用来训练的,可以更新参数。
2、训练完成后进行预测,在预测过程中,使用
model.eval()
: 告诉我们的网络,这个阶段是用来测试的,于是模型的参数在该阶段不进行更新。
边栏推荐
- 反序列化漏洞详解
- 大佬们,datax同步数据,同步过程中要新增一个uuid,请问column 怎么写pgsql,uu
- Row locks in MySQL
- LeetCode50天刷题计划(Day 6—— 整数反转 14.20-15.20)
- c语言rand函数生成随机数,详解C语言生成随机数rand函数的用法[通俗易懂]
- Longkou united chemical registration: through 550 million revenue xiu-mei li control 92.5% stake
- redis主从同步方式(redis数据同步原理)
- 全网最全音视频媒体流
- 倪光南:openEuler已达国际同类社区水准
- Range query based on date in MySQL
猜你喜欢
openEuler 社区完成首批顾问专家聘用,共同为社区的发展贡献力量
到底什么才是真正的商业智能(BI)
HTB-Shocker
立新能源深交所上市:市值55亿 哈密国投与国有基金是股东
透过现象看本质,如何针对用户做好需求分析
gconf/dconf实战编程(2)利用gconf库读写配置实战以及诸多配套工具演示
LeetCode50天刷题计划(Day 8—— 盛最多水的容器(23.00-1.20)
HTB-Shocker
ThreadLocal保存用户登录信息
【论文笔记】MiniSeg: An Extremely Minimum Network for Efficient COVID-19 Segmentation
随机推荐
给网站增加离开页面改变网站标题效果
大神们,ODPS用的是MySQL吗?
ffmpeg视频剪辑中报错Could not write header for output file #0 (incorrect codec parameters ?): ……
Pytorch —— 分布式模型训练
【LeetCode】37、解数独
【论文笔记】MiniSeg: An Extremely Minimum Network for Efficient COVID-19 Segmentation
百图生科卓越开发者计划全面升级暨《计算免疫问题白皮书》发布
第十三章 手动创建 REST 服务(一)
MySQL中根据日期进行范围查询
选择合适的 DevOps 工具,从理解 DevOps 开始
请问下怎么取数据库中上一个小时的数据到odps进行实时节点的同步呢
我寻找的方向
VIM使用指南(7)单词移动/删除技巧
性能优化——动画优化笔记
tkinter-TinUI-xml实战(6)问卷
什么是闭包?
30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?
LeetCode50天刷题计划(Day 8—— 盛最多水的容器(23.00-1.20)
gconf/dconf实战编程(3)利用dconf库读写配置实战以及诸多配套工具演示
沃文特生物IPO过会:年营收4.8亿 养老基金是股东