apex.normalization.fused_layer_norm¶
-
class
apex.normalization.
FusedLayerNorm
(normalized_shape, eps=1e-05, elementwise_affine=True)[source]¶ 应用层归一化 (Layer Normalization) 到小批量输入,如论文 Layer Normalization 中所述。
目前仅在 cuda() 张量上运行。
\[y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta\]均值和标准差分别在最后特定数量的维度上计算,这些维度的形状必须由
normalized_shape
指定。如果elementwise_affine
为True
,则 \(\gamma\) 和 \(\beta\) 是normalized_shape
的可学习仿射变换参数。注意
与 Batch Normalization 和 Instance Normalization 不同,它们使用
affine
选项对每个整个通道/平面应用标量尺度和偏置,层归一化使用elementwise_affine
应用逐元素的尺度和偏置。此层在训练模式和评估模式下都使用从输入数据计算出的统计信息。
- 参数
normalized_shape (int 或 list 或 torch.Size) –
输入张量的期望尺寸,例如
\[[* \times \text{normalized}\_\text{shape}[0] \times \text{normalized}\_\text{shape}[1] \times \ldots \times \text{normalized}\_\text{shape}[-1]]\]如果使用单个整数,则将其视为包含一个元素的列表,并且此模块将对最后一个维度进行归一化,该维度的尺寸应为该特定整数。
eps – 用于提高数值稳定性的添加到分母的值。默认值:1e-5
elementwise_affine – 一个布尔值。当设置为
True
时,此模块具有可学习的逐元素仿射参数,初始化为全一(用于权重)和全零(用于偏置)。默认值:True
。
- 形状
输入: \((N, *)\)
输出: \((N, *)\) (与输入形状相同)
示例
>>> input = torch.randn(20, 5, 10, 10) >>> # With Learnable Parameters >>> m = apex.normalization.FusedLayerNorm(input.size()[1:]) >>> # Without Learnable Parameters >>> m = apex.normalization.FusedLayerNorm(input.size()[1:], elementwise_affine=False) >>> # Normalize over last two dimensions >>> m = apex.normalization.FusedLayerNorm([10, 10]) >>> # Normalize over last dimension of size 10 >>> m = apex.normalization.FusedLayerNorm(10) >>> # Activating the module >>> output = m(input)