BN层的输出Y与输入X之间的关系是:Y = (X - running_mean) / sqrt(running_var + eps) * gamma + beta,此不赘言。其中gamma、beta为可学习参数(在pytorch中分别改叫weight和bias),训练时通过反向传播更新;而running_mean、running_var则是在前向时先由X计算出mean和var,再由mean和var以动量momentum来更新running_mean和running_var。所以在训练阶段,running_mean和running_var在每次前向时更新一次;在测试阶段,则通过net.eval()固定该BN层的running_mean和running_var,此时这两个值即为训练阶段最后一次前向时确定的值,并在整个测试阶段保持不变。
这个参数的作用如下:
训练时用来统计训练时的forward过的min-batch数目,每经过一个min-batch, track_running_stats+=1
如果没有指定momentum, 则使用1/num_batches_tracked 作为因数来计算均值和方差(running mean and variance).
模型结构
UNet_Plain(
(down_conv1): DownBlock(
(double_conv): DoubleConv(
(double_conv): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=

批量归一化(BN)是深度学习中用于加速训练和提高模型性能的技术,其核心是通过计算输入数据的均值和方差来标准化层的输出。训练时,BN利用动量更新running_mean和running_var;测试时,使用训练阶段最后的统计值。BN层包括gamma和beta参数,它们在训练中更新,影响层的缩放和平移。模型结构中,BN层如`BatchNorm2d`包含权重、偏置、运行均值和方差等参数。

1万+

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



