normalization方法
layer norm
参数
torch.nn.LayerNorm(
normalized_shape: Union[int, List[int], torch.Size],
eps: float = 1e-05,
elementwise_affine: bool = True)
shape为整数
如果传入整数,比如2,则被看做只有一个整数的list,此时LayerNorm会对输入的最后一维进行归一化,这个int值需要和输入的最后一维一样大。
ln = nn.LayerNorm(2)
bn = nn.BatchNorm1d(2)
X = torch.tensor([[1, 2], [2, 3]], dtype=torch.float32)
print('layer norm:', ln(X), '\nbatch norm:', bn(X))
layer norm: tensor([[-1.0000, 1.0000],
[-1.0000, 1.0000]], grad_fn=
batch norm: tensor([[-1.0000, -1.0000],
[ 1.0000, 1.0000]], grad_fn=
shape为元组
若形状为元组,则要对该元组(3,4)对应的后几维,求layer_norm。
【相当于把(3,4)整个flatten成一维向量,再求简单情况下的layernorm】
显然,与手算出的结果相等:
同时也等价于对内层的几维flatten之后,简单情况求layer_norm