model.eval()和torch.no_grad()参数更新的问题

model.eval()的作用是用于模型评估阶段,关闭模型的Batch normalization层和Dropout层,[参考]
在这里插入图片描述
所以在model.eval()时模型参数还是会变化[参考],梯度的计算不受影响,计算流依然会存储和计算梯度,反向传播后仍然能够更新模型的对应的权重(比如BN层的weight和bias依然能够被更新)。
而torch.no_grad()的作用就是停止autograd模块的工作,即不会自动计算和存储梯度,因此能够起到加速计算过程和节省显存的作用,同时也说明了不能够进行反向传播以更新模型权重。
所以一般torch.no_grad()和model.eval()配合使用,即:

with torch.no_grad():
	model.eval()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值