PyTorch中的BatchNorm2d层

先来看看pytorch中对于类的定义:

CLASS torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

解析一下每个参数的作用:

num_features:BatchNorm是针对每一个通道做的,所以这里应该填写(N, C, H, W)中的C

eps: 在对参数进行标准化的时候,需要保证不出现除零错误,故需要eps参数

momentum :这里,E[x]与Var[x]不仅仅与本batch的x有关,而是采用了一个滑动平均来全面考虑了之前所有batch的情况。滑动平均的参数即为momentum

PyTorch中的BatchNorm2d层_第1张图片

affine:进行放射变换,如果为False则\gamma为1,\beta为0。这两个参数都是可学习参数,在Parameter类中名称为weight和bias

track_running_stats:本参数是pytorch0.4.1后新增加的参数,在Parameter类中表现为num_batches_tracked。这个参数的作用如下:

  1. 训练时用来统计训练时的forward过的min-batch数目,每经过一个min-batch, track_running_stats+=1
  2. 如果没有指定momentum, 则使用1/num_batches_tracked 作为因数来计算均值和方差(running mean and variance).

 

这里有一个要注意的点就是,running mean和running variance的更新是不依赖反传的,即使你用detach把梯度截断之后,这两个参数仍然会变化。因此在多阶段训练模型是应该要注意这一点,即第一阶段的模型如果使用了bn,在第二阶段是不能仅仅使用detach截断梯度就完事儿了。running_mean和running_variance和num_batches_tracked参数仍然会变化进而影响结果。

你可能感兴趣的:(torch,深度学习,python)