(深入理解)model.eval() 、model.train()以及torch.no_grad() 的区别

简要版解释

在PyTorch中进行validation或者test的时侯,会使model.eval()切换到测试模式,在该模式下,model.training=Fasle,其作用是:1.dropout层会让所有的激活单元都通过,2.batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

但是该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反向传播(back probagation)

model.train()则不同,在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会一直计算数据的mean和var等参数并更新。

注意:定义了模型之后,默认model.training=True。

with torch.no_grad()则主要是用于停止autograd模块的工作,以起到加速和节省显存的作用,也就是不保存计算图,默认是保存的。

深入版解释

上面这些东西只是非常浅层的解释,但是对于技术控恐怕难以满足,尤其是你打算长期做这一块,而且经常做模型训练效果分析的同学来说,上面这个解释是完全不够的。

对于model.eval() 和model.train()上面已经说了,有一些深度学习中的机制例如batchnorm在这两个模式下,工作模式是不同的。怎么个不同呢?我们以batchnorm为例,可以参考BN中的对应章节来揭开batchnorm的用法以及其工作模式。

对于torch.no_grad(),你甚至不知道上面是什么东西,说得非常抽象,这个东西,你得先看看计算图是什么?你就明白了。见计算图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值