.train() 与 .eval() 对比
| 对比维度 | .train()(训练模式) |
.eval()(评估模式) |
|---|---|---|
| 核心作用 | 开启训练相关层的逻辑,用于模型训练 | 关闭训练相关层的逻辑,用于模型验证/测试 |
| Dropout层 | 开启随机失活(按设置的概率丢弃神经元) | 关闭失活(所有神经元都参与计算) |
| BatchNorm层 | 用当前批次计算均值/方差,更新移动统计量 | 用训练累积的移动均值/方差,不更新统计量 |
| 梯度计算 | 允许梯度计算(配合loss.backward()) |
不影响梯度计算,需手动用torch.no_grad()关闭 |
| 使用时机 | 训练循环开始前(一次即可) | 验证/测试循环开始前(一次即可) |
| 是否可嵌套 | 不可,多次调用无效果 | 不可,多次调用无效果 |