model.train()
告诉模型您正在训练模型。因此,在培训和测试过程中表现不同的有效层(例如辍学,batchnorm等)可以知道发生了什么,因此可以相应地表现。
更多详细信息:它设置训练模式(请参阅源代码 )。您可以调用model.eval()
或model.train(mode=False)
来告诉您正在测试。期望train
功能能够训练模型有点直观,但是并不能做到这一点。它只是设置模式。
0
model.train()
告诉模型您正在训练模型。因此,在培训和测试过程中表现不同的有效层(例如辍学,batchnorm等)可以知道发生了什么,因此可以相应地表现。
更多详细信息:它设置训练模式(请参阅源代码 )。您可以调用model.eval()
或model.train(mode=False)
来告诉您正在测试。期望train
功能能够训练模型有点直观,但是并不能做到这一点。它只是设置模式。
0
这是module.train()
的代码:
def train(self, mode=True):
r"""Sets the module in training mode."""
self.training = mode
for module in self.children():
module.train(mode)
return self
这是module.eval
。
def eval(self):
r"""Sets the module in evaluation mode."""
return self.train(False)
模式train
和eval
是我们可以在其中设置模块的仅有的两种模式,它们是完全相反的。
那只是一个self.training
标志,目前只有 辍学和bachnorm关心那个标志。
默认情况下,此标志设置为True
。
0
有两种方法可以让模型知道您的意图,即您要训练模型还是要使用模型进行评估。在使用model.train()的情况下,模型知道必须学习层,并且当我们使用model.eval()时,它指示模型没有新知识要学习,并且该模型用于测试。 model.eval()也是必需的,因为在pytorch中,如果我们使用batchnorm,而在测试过程中,如果我们只想传递单个图像,则如果未指定model.eval(),则pytorch会引发错误。
0
它会在
nn.Module
调用forward()
吗?我以为,当我们调用模型时,forward
使用forward
方法。为什么我们需要指定train()?