pytorch踩坑之model.eval()和model.train()输出差距很大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch踩坑之model.eval()和model.train()输出差距很大相关的知识,希望对你有一定的参考价值。

参考技术A 问题描述:
本人使用pytorch1.5版本,构建EfficientNet网络,在训练之前使用model.train()设置为训练模式。每次训练结束后进行验证集的推理测试;对于含有dropout和batchnorm层的神经网络在推理前需要用model.eval()设置dropout和batchnorm的冻结。但是对于推理结果,不同的输入,具有相同的输出;错误率很高,并且loss值也于训练时差距巨大。
解决方法:
这个错误可能是由于在batchnorm中的动量(momentum)设置而导致。在进行推理时,设置较大的动量值可以解决这个问题。如下:
nn.BatchNorm2d(out_planes, eps=1e-3, momentum=1))

参考:
[1] https://www.kaggle.com/c/recursion-cellular-image-classification/discussion/101997
[2] https://github.com/pytorch/pytorch/issues/4741
[3] https://discuss.pytorch.org/t/model-eval-gives-incorrect-loss-for-model-with-batchnorm-layers/7561/22

以上是关于pytorch踩坑之model.eval()和model.train()输出差距很大的主要内容,如果未能解决你的问题,请参考以下文章

使用 pytorch 训练和测试 CNN。有和没有 model.eval()

pytorch掉坑记录:model.eval的作用

pytorch中model.eval()和torch.no_grad()的区别

pytorch中model.eval()和torch.no_grad()的区别

踩坑系列之pytorch安装之后不能使用cuda

【Pytorch】model.eval() vs torch.no_grad()