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

pytorch 笔记:torch.nn.init

[Pytorch系列-28]:神经网络基础 - torch.nn模块功能列表

找不到名为 torch.nn 的模块

【Pytorch】model.eval() vs torch.no_grad()