PyTorch使用Tricks:梯度裁剪-防止梯度爆炸或梯度消失 !!

2025-07-01 07:51:33

文章目录

前言

1、对参数的梯度进行裁剪,使其不超过一个指定的值

2、一个使用的torch.nn.utils.clip_grad_norm_ 例子

3、怎么获得梯度的norm

4、什么情况下需要梯度裁剪

5、注意事项

前言

梯度裁剪(Gradient Clipping)是一种防止梯度爆炸或梯度消失的优化技术,它可以在反向传播过程中对梯度进行缩放或截断,使其保持在一个合理的范围内。梯度裁剪有两种常见的方法:

按照梯度的绝对值进行裁剪,即如果梯度的绝对值超过了一个阈值,就将其设置为该阈值的符号乘以该阈值。

按照梯度的范数进行裁剪,即如果梯度的范数超过了一个阈值,就将其按比例缩小,使其范数等于该阈值。例如,如果阈值为1,那么梯度的范数就是1。

在PyTorch中,可以使用 torch.nn.utils.clip_grad_value_ 和 torch.nn.utils.clip_grad_norm_ 这两个函数来实现梯度裁剪,它们都是在梯度计算完成后,更新权重之前调用的。

1、对参数的梯度进行裁剪,使其不超过一个指定的值

torch.nn.utils.clip_grad_value_ 是一个函数,它可以对一个参数的梯度进行裁剪,使其不超过一个指定的值。这样可以防止梯度爆炸或梯度消失的问题,提高模型的训练效果。

import torch

import torch.nn as nn

# 定义一个简单的线性模型

model = nn.Linear(2, 1)

# 定义一个优化器

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

# 定义一个损失函数

criterion = nn.MSELoss()

# 生成一些随机的输入和目标

x = torch.randn(4, 2)

y = torch.randn(4, 1)

# 前向传播

output = model(x)

# 计算损失

loss = criterion(output, y)

# 反向传播

loss.backward()

# 在更新权重之前&

神武内丹多少神武币_神武内丹多少神武币可以买
如何不让iPhone14 上的资料同步到到其他设备?如何关闭icloud同步?