BN举例
import torch
from torch import nn
torch.manual_seed(73)
# BN在同维度的批次上处理,为简化设批次为1
batch_size = 1
num_features=3
x=torch.randn(batch_size,num_features,7)
x
tensor([[[ 0.3408, 0.2297, 1.7066, 1.3925, -0.2963, 0.2836, -0.5602],
[ 1.4158, 1.6667, -0.2644, -1.1022, -0.8187, -0.3501, -0.0052],
[-1.6498, 0.9515, 0.7178, -2.0773, 1.6672, 0.5206, 1.6483]]])
bn = nn.BatchNorm1d(num_features=num_features)
bn(x)
tensor([[[-0.1322, -0.2768, 1.6453, 1.2366, -0.9614, -0.2067, -1.3048],
[ 1.3561, 1.6104, -0.3464, -1.1952, -0.9080, -0.4332, -0.0837],
[-1.3573, 0.4972, 0.3306, -1.6620, 1.0074, 0.1900, 0.9940]]],
grad_fn=NativeBatchNormBackward0)
bn处理后的数据,尤其是绝对值大点的数据,其绝对值会变小一点
BN试图将原数据拉到一个正态分布上
由于每个值-均值,所以,可能出正负的比例可能会有所变化
按批次处理,若有可能(即资源足够)批次的值要大一些,要能反应整体数据集的特征
参考