normalize

paddle.nn.functional. normalize ( x, p=2, axis=1, epsilon=1e-12, name=None ) [源代码]

使用 \(L_p\) 范数沿维度 axisx 进行归一化。计算公式如下:

\[y = \frac{x}{ \max\left( \lvert \lvert x \rvert \rvert_p, epsilon\right) }\]
\[\lvert \lvert x \rvert \rvert_p = \left(\sum_i {\lvert x_i\rvert^p} \right)^{1/p}\]

其中 \(\sum_i{\lvert x_i\rvert^p}\) 沿维度 axis 进行计算。

参数

  • x (Tensor) - 输入可以是 N-D Tensor。数据类型为:float32、float64。

  • p (float|int,可选) - 范数公式中的指数值。默认值:2

  • axis (int,可选)- 要进行归一化的轴。如果 x 是 1-D Tensor,轴固定为 0。如果 axis < 0,轴为 x.ndim + axis。-1 表示最后一维。

  • epsilon (float,可选) - 添加到分母上的值以防止分母除 0。默认值为 1e-12。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tensor,输出的形状和数据类型和 x 相同。

代码示例

import paddle
import paddle.nn.functional as F

paddle.disable_static()
x = paddle.arange(6, dtype="float32").reshape([2,3])
y = F.normalize(x)
print(y)
# Tensor(shape=[2, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
#        [[0.        , 0.44721359, 0.89442718],
#         [0.42426404, 0.56568539, 0.70710671]])

y = F.normalize(x, p=1.5)
print(y)
# Tensor(shape=[2, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
#        [[0.        , 0.40862012, 0.81724024],
#         [0.35684016, 0.47578689, 0.59473360]])

y = F.normalize(x, axis=0)
print(y)
# Tensor(shape=[2, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
#        [[0.        , 0.24253564, 0.37139067],
#         [1.        , 0.97014254, 0.92847669]])