【发布时间】:2018-06-17 05:35:30
【问题描述】:
官方评论显示“这仅对Dropout或BatchNorm等模块有任何影响。”但我不明白它的实现。
【问题讨论】:
-
简单明了,如果您的模型中有这样的步骤,则在评估模式下禁用 dropout 和 batchnorm。
-
这能回答你的问题吗? What does model.eval() do in pytorch?
标签: pytorch
官方评论显示“这仅对Dropout或BatchNorm等模块有任何影响。”但我不明白它的实现。
【问题讨论】:
标签: pytorch
Dropout 和 BatchNorm(可能还有一些自定义模块)在训练和评估期间的行为不同。您必须通过在模型上调用 .eval() 让模型知道何时切换到评估模式。
这会将模型中每个模块的 self.training 设置为 False。如果您要实现自己的模块,在训练和评估期间必须表现不同,您可以在执行此操作时检查 self.training 的值。
【讨论】:
.eval()。也许他们没有使用它,因为没有 Dropout 或 Batchnorm 层。但我认为从教育的角度来看,他们无论如何都应该使用它(即使它没有效果)或者至少提到它,因为它在一般情况下是必需的 =/
self.train(False),而不是 self.training,就像在前面的答案中写的那样,cf。 pytorch.org/docs/stable/_modules/torch/nn/modules/…(也许是最近的变化)。 @xjcl 正如 PyTorch 文档所说,“这仅对某些模块有任何影响。”,所以我想您可以毫无问题地系统地使用它,参见。 pytorch.org/docs/stable/nn.html#torch.nn.Module.eval