本文主要是介绍深度学习01:pytorch中model eval和torch no_grad()的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
公众号:数据挖掘与机器学习笔记
主要区别如下:
-
model.eval()会通知所有的网络层目前处于评估模式(eval mode),因此,batchnorm或者dropout会以评估模式工作而不是训练模式。
- 在
train
模式下,dropout
网络层会按照设定的参数p
设置保留激活单元的概率(保留概率=p);batchnorm
层会继续计算数据的mean和var等参数并更新。
- 在
val
模式下,dropout
层会让所有的激活单元都通过,而batchnorm
层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。 - 该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反传(backprobagation)
- 在
-
torch.no_grad():主要影响autograd梯度计算引擎,停止梯度计算。它会减少内存使用量并加快计算速度,但没法进行反向传播。
参考:
[1] https://blog.csdn.net/songyu0120/article/details/103884586
[2]https://discuss.pytorch.org/t/model-eval-vs-with-torch-no-grad/19615
这篇关于深度学习01:pytorch中model eval和torch no_grad()的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!