eval() 模式下的训练模型在 PyTorch 中提供更好的结果?

Training model in eval() mode gives better result in PyTorch?

我有一个带有 Dropout 层的模型(p=0.6)。我最终以 .eval() 模式训练模型并再次以 .train() 模式训练模型,我发现训练 .eval() 模式给了我更好的准确性和更快的训练数据损失减少,

train():训练损失:0.832,验证损失:0.821
eval():训练损失:0.323,验证损失:0.251

为什么会这样?

这看起来模型架构很简单,在训练模式下,无法捕获数据中的特征,因此出现欠拟合。

eval() 在其他模块中禁用 dropouts 和 Batch normalization。

这意味着模型在没有 dropout 的情况下训练得更好,有助于模型更好地学习更多的神经元,同时增加层大小,增加层数,降低 dropout 概率,有助于。