mindspore.ops.LayerNorm
- class mindspore.ops.LayerNorm(begin_norm_axis=1, begin_params_axis=1, epsilon=1e-07)[源代码]
在输入Tensor上应用层归一化(Layer Normalization)。
此算子将在给定的轴上对输入进行层归一化。Layer Normalization 描述了LayerNorm。
\[y = \frac{x - mean}{\sqrt{variance + \epsilon}} * \gamma + \beta\]其中 \(\gamma\) 是Scalar, \(\beta\) 是偏置项, \(\epsilon\) 是精度值。
- 参数:
begin_norm_axis (int) - 指定 input_x 需进行层归一化的起始维度,其值必须在[-1, rank(input_x))范围内。默认值:
1
。begin_params_axis (int) - 指定输入参数(gamma, beta) 需进行层归一化的开始轴,其值必须在[-1, rank(input_x))范围内。默认值:
1
。注: 在Ascend平台, begin_params_axis 需要和 begin_norm_axis 的值相等。epsilon (float) - 添加到分母中的值(\(\epsilon\)),以确保数据稳定性。默认值:
1e-7
。
- 输入:
input_x (Tensor) - LayerNorm的输入,shape为 \((N, \ldots)\) 的Tensor。支持的数据类型:float16、float32、float64。
gamma (Tensor) - 可学习参数 \(\gamma\) ,shape为 input_x_shape[begin_params_axis:] 的Tensor。支持的数据类型:float16、float32、float64。
beta (Tensor) - 可学习参数 \(\beta\) ,shape为 input_x_shape[begin_params_axis:] 的Tensor。支持的数据类型:float16、float32、float64。
- 输出:
tuple[Tensor],3个Tensor组成的tuple,层归一化输入和更新后的参数。
output_x (Tensor) - 层归一化输入,数据类型和shape与 input_x 相同。
mean (Tensor) - 输入的均值,其shape的前 begin_norm_axis 维与 input_x 相同,其余维度为1。假设输入 input_x 的shape为 \((x_1, x_2, \ldots, x_R)\) , 输出 mean 的shape为 \((x_1, \ldots, x_{begin\_norm\_axis}, 1, \ldots, 1)\) (当 begin_norm_axis=0 时, mean shape为 \((1, \ldots, 1)\) )。
rstd (Tensor) - 输入的标准差的倒数,shape同 mean 一致。
- 异常:
TypeError - begin_norm_axis 或 begin_params_axis 不是int。
TypeError - epsilon 不是float。
TypeError - input_x、gamma 或 beta 不是Tensor。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> import numpy as np >>> from mindspore import Tensor, ops >>> input_x = Tensor(np.array([[1, 2, 3], [1, 2, 3]]), mindspore.float32) >>> gamma = Tensor(np.ones([3]), mindspore.float32) >>> beta = Tensor(np.ones([3]), mindspore.float32) >>> layer_norm = ops.LayerNorm() >>> output, _, _ = layer_norm(input_x, gamma, beta) >>> print(output) [[-0.2247448 1. 2.2247448] [-0.2247448 1. 2.2247448]]