【PyTorch】eval() ==>主要是针对某些在train和predict两个阶段会有不同参数的层,比如Dropout层和BN层
发布日期:2021-07-01 02:26:37 浏览次数:2 分类:技术文章

本文共 778 字,大约阅读时间需要 2 分钟。

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

转载地址:https://mapengsen.blog.csdn.net/article/details/117879115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【pytorch】torch.unsqueeze() 和 torch.squeeze()==>扩充维度和降维
下一篇:【pytorch 】torchvision.transforms.CenterCrop==>从图像中心裁剪图片

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年05月04日 20时26分08秒