在 PyTorch 中,`.eval()` 方法是一个非常重要的模型方法,用于将模型设置为评估模式。这是对于那些在训练和测试阶段行为不同的层(如 dropout 层和批归一化层)非常关键的操作。
功能
当调用 `.eval()` 时,它会影响模型中的特定层如下:
- Dropout 层:在训练模式 (`model.train()`) 下,dropout 层随机地将输入的部分元素置为零(根据指定的丢弃概率),这有助于防止模型过拟合。但在评估模式下(即调用了 `model.eval()` 后),dropout 层会停用,即它不会丢弃任何元素,而是传递所有的输入数据到下一层。
- Batch Normalization (批归一化) :在训练模式下,这些层会根据每个批次的均值和标准差对数据进行归一化,并且会更新用于归一化的均值和标准差的估计。在评估模式下,这些层不再更新这些统计数据,而是使用训练期间学到的均值和标准差来归一化当前输入的数据。
用途
调用 `.eval()` 非常重要,尤其是在进行模型验证、测试或实际部署时,因为你通常希望在这些情况下模型的行为是一致的,不受训练时随机性的影响。
clone = MLP()
clone.load_state_dict(torch.load('mlp.params')) # 加载训练好的模型参数
clone.eval() # 设置为评估模式
这样设置后,模型 `clone` 就可以用于进行预测或评估,而其行为将与训练时的dropout和批归一化操作有所不同,以确保结果的一致性和可靠性。