【PyTorch】eval() ==>主要是针对某些在train和predict两个阶段会有不同参数的层,比如Dropout层和BN层

本文介绍了PyTorch中model.eval()的作用,特别是针对Dropout和BN层的处理。模型在预测阶段务必设置为eval模式,以保持一致性,防止BN的batch归一化和Dropout的行为改变测试结果。了解BN在测试时采用全局mean和std,以及Dropout在训练和预测顺序的不同至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

model的eval方法主要是针对某些在train和predict两个阶段会有不同参数的层。比如Dropout层和BN层

torch为了方便大家,设计这个eval方法就是让我们可以不用手动去针对这些层做predict阶段的处理(也可以叫evaluation阶段,所以这个方法名才是eval)

这也就是说,如果模型中用了dropout或bn,那么predict时必须使用eval 否则结果是没有参考价值的,不存在选择的余地。

使用Pytorch训练模型,一定要注意一个细节

有时候明明训练很好,测试时候出问题?

这时候我们要找一下Model里是否有BN或者 Dropout层,如果存在了,那就要小心了!!!

测试之前加入下面这句话!!!!

# 注意为了排除BN和Dropout对测试影响
model = model.eval()

BN解释看这段话:

对于BN,训练时通常采用mini-batch,所以每一批中的mean和std大致是相同的;而测试阶段往往是单个图像的输入,不存在mini-batch的概念。所以将model改为eval模式后,BN的参数固定,并采用之前训练好的全局的mean和std;

BN在train时每个batch做了不同的归一化因此也对应了不同的参数,相应predict时实际用的参数是每个batch下参数的移动平均。

啥意思?就是使用全局固定的BN

Dropout看这段话:

训练阶段,隐含层神经元先乘概率P,再进行激活;而测试阶段,神经元先激活,每个隐含层神经元的输出再乘概率P,其实就是Dropout在train时随机选择神经元而predict要使用全部神经元并且要乘一个补偿系数

啥意思?

顺序不同!



原文链接:https://blog.csdn.net/qq_15698613/article/details/109388820

pytorch中model.eval()会对哪些函数有影响? - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pengsen Ma

太谢谢了

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

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

打赏作者

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

抵扣说明:

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

余额充值