在深度学习中,我们通常使用训练数据对模型进行训练,并使用测试数据对模型进行评估。在训练和测试阶段,模型的行为可能会有所不同,特别是当模型包含 Batch Normalization 和 Dropout 等层时,这些层在训练和测试阶段的行为可能不同。因此,我们需要根据不同的模式设置模型的行为,以保证模型的正常工作。
1. model.train()
model.train()的主要作用是让你的模型知道现在正在训练。像 dropout、batchnorm 层在训练和测试时的作用不同,所以需要使它们运行在对应的模式中。
model.train()的作用是启用 Batch Normalization 和 Dropout。
如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。
2. model.eval()
model.eval()的作用是不启用 Batch Normalization 和 Dropout。
如果模型中有BN层(Batch Normalization)和Dropout,在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。
训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。

1266

被折叠的 条评论
为什么被折叠?



