首页 > 解决方案 > PyTorch 加载中的 eval 方法

问题描述

我今天有一个奇怪的经历。我在 PyTorch 中训练了一个模型,然后用测试样本对其进行了测试。在这一步中,我得到了很好的结果(想象一下 X)。然后我保存模型并加载模型,看看我可以得到与保存的模型相同的结果(X)。不幸的是,加载模型后,结果更差(不是 X)。我测试了这些(请不要讨论它们)来解决问题:

最后,我可以找出问题所在。问题是我应该在加载模型步骤中关闭评估。这意味着在加载部分,我不需要使用 torch.eval()。我知道 eval() 在训练和评估模式中对 Dropout 层等的影响。

我的问题是,当我的模型中没有 dropout 层时,为什么 torch.eval() 反过来对我有用?我的模型中有 BatchNormalization,我在 PyTorch 网站上找不到 eval() 方法对 BatchNorm 和 DropOut 的影响。

一般来说,我的问题是我在加载模型部分读到,我应该使用 eval() 模式。但是,为什么在我的情况下,情况恰恰相反?

标签: deep-learningpytorcheval

解决方案


推荐阅读