BN测试和训练时有什么不同, 在测试时怎么使用?

我们来彻底搞懂 Batch Normalization(BN) 在训练和测试阶段的区别,以及 测试时怎么用


🧠 一句话总结:

训练时 :使用 当前 mini-batch 的均值和方差
测试时 :使用 整个训练集估计的"滑动平均均值和方差"


🧪 训练阶段的 BN(model.train()):

  1. 对每个 mini-batch:

• 计算该 batch 的均值 μ 和方差 σ²

• 进行标准化:

• 然后进行缩放和平移:

  1. 同时更新全局滑动均值和滑动方差(moving mean/var)用于测试。

✅ 测试阶段的 BN(model.eval()):

  1. 不再用当前 batch 的统计量(因为测试数据可能 batch 很小,甚至 batch=1,统计不稳定)

  2. 使用训练时保存下来的滑动均值和方差来做归一化:


🔁 在 PyTorch 中怎么做?

训练时:

复制代码
model.train()  # 启用 dropout、BN 用 batch 统计

测试/验证时:

复制代码
model.eval()   # 关闭 dropout,BN 用全局 moving 均值/方差

你想实际测试一个 BN 层,可以这样

复制代码
import torch
import torch.nn as nn

bn = nn.BatchNorm2d(3)

x = torch.randn(4, 3, 8, 8)

# 训练时
bn.train()
out_train = bn(x)

# 测试时
bn.eval()
out_test = bn(x)

📌 小结表格

模式 统计方式 是否更新均值/方差 适用场景
train() 当前 mini-batch ✅ 是 训练
eval() 滑动平均值 ❌ 否 推理、验证

全局滑动均值和滑动方差是什么

全局滑动均值(moving mean )和滑动方差(moving variance )是 Batch Normalization(BN) 在训练过程中用于统计数据分布的全局估计值。它们通过 指数加权移动平均 的方式进行更新,并在 测试阶段 使用。具体而言,它们用于避免测试时每次计算时都依赖小批量数据(mini-batch)的统计信息。


🧠 具体解释:

1. 滑动均值(Moving Mean):

• 训练时,BN层 会不断计算当前 batch 的均值(mean)和方差(variance)。

• 但是,为了让测试时能够使用更稳定的均值和方差,BN会 维护一个滑动均值

• 这个均值是通过以下公式更新的:

其中,α 是一个常数(通常接近1,比如 0.9 或 0.99),用于控制历史统计对当前的影响。

2. 滑动方差(Moving Variance):

• 类似于滑动均值,BN层也会维护一个 滑动方差,它是通过以下公式更新的:

• 这里的σ² 是当前 batch 的方差。

3. 为什么要使用滑动均值和滑动方差?

稳定性:在测试时,数据通常是一次性输入模型,batch size 可能为 1 或者非常小,这会导致当前 batch 的统计量(均值和方差)非常不稳定。如果每次测试时都重新计算均值和方差,可能会导致不稳定的推理结果。

全局统计:滑动均值和方差通过结合历史数据的统计量,提供了一个更为稳定的全局估计,这有助于在整个训练过程中产生更一致的推理结果。


🚀 总结:

训练阶段:每个 mini-batch 计算新的均值和方差,并且更新滑动均值和滑动方差。

测试阶段:使用训练中计算得到的滑动均值和滑动方差,而不再使用当前 batch 的均值和方差。

小结表格:

阶段 使用的均值/方差 更新均值/方差
训练 当前 batch 的均值和方差 ✅ 更新滑动均值/方差
测试 滑动均值和滑动方差 ❌ 不更新
相关推荐
浩浩的代码花园7 小时前
自研端侧推理模型实测效果展示
android·深度学习·计算机视觉·端智能
晨非辰7 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
鼎道开发者联盟7 小时前
智能原生操作系统畅想:人智共生新时代的基石
人工智能·机器学习·自然语言处理
这张生成的图像能检测吗10 小时前
(论文速读)EfficientTrain++: 高效视觉骨干训练的通用课程学习
人工智能·深度学习·计算机视觉·训练方法
晚霞的不甘11 小时前
CANN:华为全栈AI计算框架的深度解析(终极扩展版 · 完整篇)
人工智能·华为
lisw0513 小时前
6G频段与5G频段有何不同?
人工智能·机器学习
2501_9416233215 小时前
人工智能赋能智慧农业互联网应用:智能种植、农业数据分析与产量优化实践探索》
大数据·人工智能
不爱吃糖的程序媛15 小时前
华为 CANN:昇腾 AI 的异构计算架构核心与开源生态解析
人工智能·华为·架构