pytorch测试时为什么要加上model.eval()


这篇文章主要介绍pytorch测试时为什么要加上model.eval(),文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!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()的区别在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的个人理解不理解为什么在训练和测试函数中model.eval(),和model.train()的区别,经查阅后做如下整理1、拿到数据后进行训练,在训练过程中,使用model.train():告诉我们的网络,这个阶段是用来训练的,可以更新参数。2、训练完成后进行预测,在预测过程中,使用model.eval() : 告诉我们的网络,这个阶段是用来测试的,于是模型的参数在该阶段不进行更新。查阅相关资料:传送门with torch.no_grad – disables tracking of gradients in autograd.model.eval() changes the forward() behaviour of the module it is called uponeg, it disables dropout and has batch norm use the entire population statistics总结一下就是说,在eval阶段了,即使不更新,但是在模型中所使用的dropout或者batch norm也就失效了,直接都会进行预测,而使用no_grad则设置让梯度Autograd设置为False(因为在训练中我们默认是True),这样保证了反向过程为纯粹的测试,而不变参数。另外,参考文档说这样避免每一个参数都要设置,解放了GPU底层的时间开销,在测试阶段统一梯度设置为False以上是“pytorch测试时为什么要加上model.eval()”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注百云主机行业资讯频道!

相关推荐: java并发JUC工具包AtomicInteger原子整型语法的示例分析

这篇文章主要介绍了java并发JUC工具包AtomicInteger原子整型语法的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。AtomicInteger 类底层存储一个int值,并提供…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/22 20:48
Next 08/22 20:48

相关推荐