Pytorch 什么';s torch.nn模块中函数eval()的含义

Pytorch 什么';s torch.nn模块中函数eval()的含义,pytorch,Pytorch,官方评论显示,“这只对辍学或BatchNorm等模块有任何影响。”但我不理解它的实现。辍学和BatchNorm(可能还有一些自定义模块)在培训和评估期间表现不同。您必须通过调用模型上的.eval(),让模型知道何时切换到eval模式 这将为模型中的每个模块将self.training设置为False。如果您正在实现自己的模块,而该模块在培训和评估期间必须表现不同,则可以在执行此操作时检查self.training的值。这很简单,如果您的模型中有此类步骤,则在评估模式下禁用dropout和batc

官方评论显示,“这只对辍学或BatchNorm等模块有任何影响。”但我不理解它的实现。

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


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

这很简单,如果您的模型中有此类步骤,则在评估模式下禁用dropout和batchnorm。这是否回答了您的问题?在PyTorch官方教程(60分钟闪电战,训练分类器)中,他们在切换到评估(测试集)时没有使用
.eval()。也许他们没有使用它,因为没有辍学或批处理。但我认为,从教育的角度来看,他们无论如何都应该使用它(即使它没有效果),或者至少应该提到它,因为它在一般情况下是必需的=/PyTorch代码提到
self.train(False)
,而不是像前面的答案中所写的
self.training
,cf.(可能是最近的变化)@正如PyTorch文档所说的那样,“这只对某些模块有任何影响”,所以我想您可以系统地使用它而不会遇到麻烦,cf。