zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

PyTorch 参数 不同 两个 阶段 主要 针对 某些
2023-09-14 09:06:09 时间

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()会对哪些函数有影响? - 知乎