clip_grad_norm_

paddle.nn.utils. clip_grad_norm_ ( parameters, max_norm, norm_type=2.0, error_if_nonfinite=False ) [源代码]

对传入所有带有梯度参数进行梯度裁剪。范数会在所有梯度上一起计算,类似在计算一个更大的向量。梯度会在适当位置进行裁剪。

这个 API 只能在动态图上使用,暂时不支持静态图模式。

参数

  • parameters (Iterable[paddle.Tensor] or paddle.Tensor) - 需要参与梯度裁剪的一个 Tensor 或者多个 Tensor。

  • max_norm (float or int) - 梯度的最大范数。

  • norm_type (float or int) - 所用 p-范数类型。可以是无穷范数的`inf`。

  • error_if_nonfinite (bool) - 如果为 True,且如果来自:attr:parameters`的梯度的总范数为`naninf`或-inf`,则抛出错误。

返回

参数梯度的总范数(视为一个单独的变量)

代码示例

import paddle

x = paddle.uniform([10, 10], min=-1.0, max=1.0, dtype='float32')
max_norm = float(5.0)
linear = paddle.nn.Linear(in_features=10, out_features=10)
out = linear(x)
loss = paddle.mean(out)
loss.backward()

paddle.nn.utils.clip_grad_norm_(linear.parameters(), max_norm)

sdg = paddle.optimizer.SGD(learning_rate=0.1, parameters=linear.parameters())
sdg.step()