LayerNorm¶
- class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, bias=True, device=None, dtype=None)[源代码]¶
对输入的小批量应用层归一化。
此层实现的操作如论文 层归一化 中所述
x ] V a r [ x ] + ϵ ∗ γ + β y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta 均值和标准差是在最后 D 个维度上计算的,其中 D 是
normalized_shape
的维度。例如,如果normalized_shape
为(3, 5)
(一个二维形状),则均值和标准差是在输入的最后两个维度上计算的(即input.mean((-2, -1))
)。 和 是normalized_shape
的可学习仿射变换参数,如果elementwise_affine
为True
。标准差是通过有偏估计量计算的,等效于 torch.var(input, unbiased=False)。注意
与批归一化和实例归一化不同,后者使用
affine
选项为每个完整通道/平面应用标量缩放和偏差,层归一化使用elementwise_affine
为每个元素应用缩放和偏差。此层在训练和评估模式下都使用从输入数据计算的统计数据。
- 参数
normalized_shape (int 或 list 或 torch.Size) –
输入形状,来自大小为
1 ] × … × normalized_shape [ − 1 ] ] [* \times \text{normalized\_shape}[0] \times \text{normalized\_shape}[1] \times \ldots \times \text{normalized\_shape}[-1]] 如果使用单个整数,则将其视为单元素列表,并且此模块将在最后一个维度上进行归一化,该维度预期为该特定大小。
eps (float) – 添加到分母以提高数值稳定性的值。默认值:1e-5
elementwise_affine (bool) – 布尔值,当设置为
True
时,此模块具有可学习的逐元素仿射参数,初始化为 1(权重)和 0(偏差)。默认值:True
。bias (bool) – 如果设置为
False
,则该层将不学习加性偏差(仅在elementwise_affine
为True
时相关)。默认值:True
。
- 变量
weight – 模块的可学习权重,形状为 ,当
elementwise_affine
设置为True
时。这些值初始化为 1。bias – 模块的可学习偏差,形状为 ,当
elementwise_affine
设置为True
时。这些值初始化为 0。
- 形状
输入:
输出: (与输入相同的形状)
示例
>>> # NLP Example >>> batch, sentence_length, embedding_dim = 20, 5, 10 >>> embedding = torch.randn(batch, sentence_length, embedding_dim) >>> layer_norm = nn.LayerNorm(embedding_dim) >>> # Activate module >>> layer_norm(embedding) >>> >>> # Image Example >>> N, C, H, W = 20, 5, 10, 10 >>> input = torch.randn(N, C, H, W) >>> # Normalize over the last three dimensions (i.e. the channel and spatial dimensions) >>> # as shown in the image below >>> layer_norm = nn.LayerNorm([C, H, W]) >>> output = layer_norm(input)