torch.nn 模块中函数 eval() 的含义是啥
Posted
技术标签:
【中文标题】torch.nn 模块中函数 eval() 的含义是啥【英文标题】:What's the meaning of function eval() in torch.nn moduletorch.nn 模块中函数 eval() 的含义是什么 【发布时间】:2018-06-17 05:35:30 【问题描述】:官方评论显示“这仅对Dropout或BatchNorm等模块有任何影响。”但我不明白它的实现。
【问题讨论】:
简单明了,如果您的模型中有这样的步骤,则在评估模式下禁用 dropout 和 batchnorm。 这能回答你的问题吗? What does model.eval() do in 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以上是关于torch.nn 模块中函数 eval() 的含义是啥的主要内容,如果未能解决你的问题,请参考以下文章
pytorch中的神经网络子模块(线性模块)——torch.nn.Linear
pytorch----nn.Modulenn.functionalnn.Sequentialnn.optim