mindspore.ops.clip_by_global_norm

mindspore.ops.clip_by_global_norm(x, clip_norm=1.0, use_norm=None)[源代码]

通过权重梯度总和的比率来裁剪多个Tensor的值。

Note

输入 x 应为Tensor的tuple或list。否则,将引发错误。

Note

在半自动并行模式或自动并行模式下,如果输入是梯度,那么将会自动汇聚所有设备上的梯度的平方和。

参数:

  • x (Union(tuple[Tensor], list[Tensor])) - 由Tensor组成的tuple,其每个元素为任意维度的Tensor。

  • clip_norm (Union(float, int)) - 表示裁剪比率,应大于0。默认值:1.0。

  • use_norm (None) - 表示全局范数。目前只支持None,默认值:None。

返回:

tuple[Tensor],表示裁剪后的Tensor。其数据类型与 x 相同,输出tuple中的每个Tensor与输入shape相同。

支持平台:

Ascend GPU CPU

样例:

>>> from mindspore import Tensor, ops
>>> import numpy as np
>>> x1 = np.array([[2., 3.], [1., 2.]]).astype(np.float32)
>>> x2 = np.array([[1., 4.], [3., 1.]]).astype(np.float32)
>>> input_x = (Tensor(x1), Tensor(x2))
>>> out = ops.clip_by_global_norm(input_x, 1.0)
>>> print(out)
(Tensor(shape=[2, 2], dtype=Float32, value=
[[ 2.98142403e-01,  4.47213590e-01],
 [ 1.49071202e-01,  2.98142403e-01]]), Tensor(shape=[2, 2], dtype=Float32, value=
[[ 1.49071202e-01,  5.96284807e-01],
 [ 4.47213590e-01,  1.49071202e-01]]))