【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
相关文章
- ssd.pytorch
- paddle deepspeech v2 转 pytorch
- Pytorch 实现NonLocalBlock
- Pytorch——把模型的所有参数的梯度清0
- pytorch中的Variable()
- PyTorch学习笔记(六):PyTorch进阶训练技巧
- 【Deepin 20系统】Linux系统Anaconda安装Pytorch
- pytorch 27 科学炼丹(训练)方式之——无痛涨点(模型重参数化,ACNet、RepVGG、DBBNet)
- pytorch_grad_cam——pytorch下的模型特征(Class Activation Mapping, CAM)可视化库
- PyTorch使用技巧2:netron可视化模型结构
- pytorch中数据在CPU与GPU之间的切换