用法介绍
Batch Normlization的作用就是将这些输入值进行标准化,这样一方面提高梯度的收敛速度,加快模型的训练速度;另一方面使得每一层单元服从同一分布减少了变化带来的不确定性,而且可以缓解训练过程梯度消失的问题。BN具体的数学公式表示为 y = x − E [ x ] V a r [ x ] + ϵ ∗ γ + β y=\frac{x -\mathrm{E}[x]}{\sqrt{\mathrm{Var}[x]+\epsilon}}*\gamma+\beta y=Var[x]+ϵx−E[x]∗γ+βpytorch中常见的关于BN的实现有两种方法分别是torch.nn.BatchNorm1d和torch.nn.BatchNorm2d。torch.nn.BatchNorm1d表示的是对小批量的2d或3d输入进行批BN标准化操作,torch.nn.BatchNorm2d表示的是对小批量3d数据组成的4d输入进行批标准化。它们具体用法如下所示:
CLASS torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)
- num_features:表示来自输入的特征数,即输入大小的形状可以是batch_size * num_features也可以是batch_size * num_features * width
- eps:为保证数值稳定性(分母不能趋近或取0,给分母加上的值。默认为1e-5
- momentum:动态均值和动态方差所使用的动量,其中默认值为0.1
- affine:当取值为True时,给该层添加可学习的仿射变换参数
CLASS torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)
- num_features:表示来自输入的特征数,即输入大小的形状可以是batch_size* num_features* height* width
- eps:为保证数值稳定性(分母不能趋近或取0,给分母加上的值。默认为1e-5
- momentum:动态均值和动态方差所使用的动量,其中默认值为0.1
- affine:当取值为True时,给该层添加可学习的仿射变换参数。
代码介绍
torch.nn.BatchNorm1d和torch.nn.BatchNorm2d的代码实例如下所示:
import torch
import torch.nn as nn
BatchNorm1d = nn.BatchNorm1d(100)
BatchNorm2d = nn.BatchNorm2d(100)
input_tensor1 = torch.randn(20, 100)
input_tensor2 = torch.randn(20, 100, 35, 45)
output1 = BatchNorm1d(input_tensor1)
output2 = BatchNorm2d(input_tensor2)