我应该什么时候使用.eval()?我明白它应该允许我“评估我的模型”。我如何关闭它进行培训?使用.eval()训练code的示例。
.eval()
cmssoen21#
model.eval()是一种开关,用于模型的某些特定层/部分,这些层/部分在训练和推理期间表现不同例如,Dropouts层、BatchNorm层等。在模型评估期间,您需要关闭它们,.eval()将为您执行此操作。此外,评估/确认的常见做法是使用torch.no_grad()与model.eval()配对以关闭梯度计算:
model.eval()
torch.no_grad()
# evaluate model: model.eval() with torch.no_grad(): ... out_data = model(data) ...
但是,不要忘记在评估步骤后返回training模式:
training
# training step ... model.train() ...
vq8itlhq2#
| model.train()|model.eval()|| - ------|- ------|| 将模型设置为训练模式:·标准化层1使用每批统计数据·激活Dropout图层2|在eval评估(推理)模式下设置模型:·归一化图层使用运行统计数据·取消激活Dropout图层|| | 相当于model.train(False)。|您可以通过运行model.train()来关闭求值模式,但在将模型作为推理引擎运行时,即在测试、验证和预测时,应该使用它(尽管实际上,如果您的模型不包含任何differently behaving layers,它也不会产生任何影响)。1.例如BatchNorm、InstanceNorm1.这包括RNN模块etc的子模块。
model.train()
Dropout
model.train(False)
BatchNorm
InstanceNorm
wsxa1bj13#
model.eval是torch.nn.Module的方法:
model.eval
torch.nn.Module
eval()
将模块设置为评估模式。这仅对某些模块有影响。如果受到影响,请参见特定模块的文档,了解其在培训/评估模式下的行为详情,例如Dropout、BatchNorm等。这与self.train(False)等效。相反的方法是由Umang Gupta很好地解释的model.train。
self.train(False)
model.train
xurqigkl4#
对上述答案的补充:我最近开始使用Pytorch-lightning,它 Package 了培训-验证-测试管道中的大部分样板文件。除此之外,它还允许使用train_step和validation_step回调函数 Package eval和train,从而使model.eval()和model.train()近乎冗余,这样您就不会忘记。
train_step
validation_step
eval
train
4条答案
按热度按时间cmssoen21#
model.eval()
是一种开关,用于模型的某些特定层/部分,这些层/部分在训练和推理期间表现不同例如,Dropouts层、BatchNorm层等。在模型评估期间,您需要关闭它们,.eval()
将为您执行此操作。此外,评估/确认的常见做法是使用torch.no_grad()
与model.eval()
配对以关闭梯度计算:但是,不要忘记在评估步骤后返回
training
模式:vq8itlhq2#
|
model.train()
|model.eval()
|| - ------|- ------|
| 将模型设置为训练模式:·标准化层1使用每批统计数据·激活
Dropout
图层2|在eval评估(推理)模式下设置模型:·归一化图层使用运行统计数据·取消激活Dropout
图层|| | 相当于
model.train(False)
。|您可以通过运行
model.train()
来关闭求值模式,但在将模型作为推理引擎运行时,即在测试、验证和预测时,应该使用它(尽管实际上,如果您的模型不包含任何differently behaving layers,它也不会产生任何影响)。1.例如
BatchNorm
、InstanceNorm
1.这包括RNN模块etc的子模块。
wsxa1bj13#
model.eval
是torch.nn.Module
的方法:eval()
将模块设置为评估模式。
这仅对某些模块有影响。如果受到影响,请参见特定模块的文档,了解其在培训/评估模式下的行为详情,例如
Dropout
、BatchNorm
等。这与
self.train(False)
等效。相反的方法是由Umang Gupta很好地解释的
model.train
。xurqigkl4#
对上述答案的补充:
我最近开始使用Pytorch-lightning,它 Package 了培训-验证-测试管道中的大部分样板文件。
除此之外,它还允许使用
train_step
和validation_step
回调函数 Packageeval
和train
,从而使model.eval()
和model.train()
近乎冗余,这样您就不会忘记。