model.eval() 开启后,Dropout 层会被禁用,Batch Normalization 层会切换到评估模式。
具体地:
-
Dropout:
model.eval()
会关闭 Dropout 层,因为在评估或推理阶段,Dropout 不再需要随机丢弃神经元以防止过拟合,应该使用所有神经元来保证模型的稳定性和一致性。 -
Batch Normalization:
model.eval()
会改变 Batch Normalization 层的行为,但并不会完全禁用它们。Batch Normalization 在训练阶段使用 mini-batch 的统计数据(均值和方差)来标准化数据,而在评估或推理阶段,使用的是整个训练数据集的统计数据(即运行中的均值和方差),这些统计数据是在训练过程中累积下来的。