Deep learning Pyrotch加载中的Eval方法

Deep learning Pyrotch加载中的Eval方法,deep-learning,pytorch,eval,Deep Learning,Pytorch,Eval,我今天有一个奇怪的经历。我用Pytork训练了一个模型,然后用测试样本进行了测试。在这一步中,我得到了很好的结果(想象X)。然后保存模型并加载模型,以查看是否可以使用保存的模型获得相同的结果(X)。 不幸的是,加载模型后,结果更糟(不是X)。我测试了这些(请不要讨论它们)以解决问题: 我用不同的方法保存-->整个模型,参数字典 在训练和测试中进行同样的随机化 从CPU切换到GPU并返回 使用梯度零点等等 最后,我可以解决这个问题。问题是我应该在加载模型步骤中关闭评估。这意味着在加载部分,我不

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

  • 我用不同的方法保存-->整个模型,参数字典
  • 在训练和测试中进行同样的随机化
  • 从CPU切换到GPU并返回
  • 使用梯度零点等等
最后,我可以解决这个问题。问题是我应该在加载模型步骤中关闭评估。这意味着在加载部分,我不需要使用torch.eval()。我知道eval()会在培训和评估模式中对辍学者产生影响

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


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

您在培训中没有打开
eval
进行评估,即在评估
X
时?我说的是测试,而不是评估。在使用测试样本进行测试时,我有两个结果。当我在训练后测试模型而不保存模型时。当我保存经过训练的模型并再次加载它时,会出现另一个错误。经过调查,我发现问题出在eval()方法上。因此,在加载模型后,如果我根本不使用torch.eval(),那么在上述两种情况下,我将得到相同的结果。我的问题不是如何解决这个问题。问题是,我希望在加载后使用eval来更改评估模式中的模型。