【问题标题】:What's the meaning of function eval() in torch.nn moduletorch.nn 模块中函数 eval() 的含义是什么
【发布时间】:2018-06-17 05:35:30
【问题描述】:

官方评论显示“这仅对Dropout或BatchNorm等模块有任何影响。”但我不明白它的实现。

【问题讨论】:

标签: pytorch


【解决方案1】:

Dropout 和 BatchNorm(可能还​​有一些自定义模块)在训练和评估期间的行为不同。您必须通过在模型上调用 .eval() 让模型知道何时切换到评估模式。

这会将模型中每个模块的 self.training 设置为 False。如果您要实现自己的模块,在训练和评估期间必须表现不同,您可以在执行此操作时检查 self.training 的值。

【讨论】:

  • 在 PyTorch 官方教程(60 Minute Blitz,Training A Classifier)中,他们在切换到评估(测试集)时没有使用.eval()。也许他们没有使用它,因为没有 Dropout 或 Batchnorm 层。但我认为从教育的角度来看,他们无论如何都应该使用它(即使它没有效果)或者至少提到它,因为它在一般情况下是必需的 =/
  • PyTorch 代码提到 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
猜你喜欢
  • 2012-06-08
  • 2016-07-25
  • 2019-11-05
  • 2019-08-26
  • 2020-12-29
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多