mindspore.nn.ClipByNorm
- class mindspore.nn.ClipByNorm(axis=None)[源代码]
对输入Tensor的值进行裁剪,使用 \(L_2\) 范数控制梯度。
如果输入Tensor的 \(L_2\) 范数不大于输入 clip_norm ,则此层的输出保持不变。 否则,Tensor将标准化为:
\[\text{output}(X) = \frac{\text{clip_norm} * X}{L_2(X)},\]其中 \(L_2(X)\) 是 \(X\) 的 \(L_2\) 范数。
参数:
axis (Union[None, int, tuple(int)]) - 指定在哪个维度上计算 \(L_2\) 范数。如果为None,则计算所有维度。默认值:None。
输入:
x (Tensor) - 输入n维的Tensor,数据类型为float32或float16。
clip_norm (Tensor) - shape为 \(()\) 或 \((1)\) 的Tensor。或者其shape可以广播到 x 的shape。
输出:
Tensor,裁剪后的Tensor与输入 x 的shape相同,数据类型为float32。
异常:
TypeError - axis 不是None、int、或tuple。
TypeError - x 的数据类型既不是float16也不是float32。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> net = nn.ClipByNorm() >>> x = Tensor(np.random.randint(0, 10, [4, 16]), mindspore.float32) >>> clip_norm = Tensor(np.array([100]).astype(np.float32)) >>> output = net(x, clip_norm) >>> print(output.shape) (4, 16)