温馨提示×

pytorch张量梯度清零吗

小樊
81
2024-12-25 21:00:27
栏目: 深度学习

是的,PyTorch中的张量梯度可以清零。可以使用zero_grad()方法将模型参数的梯度清零。在训练神经网络时,通常需要在每次迭代之前将梯度清零,以确保梯度的更新是基于最新的误差计算得到的。

例如,在使用PyTorch训练一个线性回归模型时,可以在每次迭代之前使用zero_grad()方法将模型参数的梯度清零:

import torch

# 定义模型参数
w = torch.tensor(1.0, requires_grad=True)
b = torch.tensor(0.0, requires_grad=True)

# 定义输入数据和目标数据
x = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32)
y = torch.tensor([2.0, 4.0, 6.0], dtype=torch.float32)

# 定义损失函数和优化器
loss_fn = torch.nn.MSELoss()
optimizer = torch.optim.SGD([w, b], lr=0.01)

# 训练模型
for epoch in range(10):
    # 将梯度清零
    optimizer.zero_grad()

    # 计算预测值
    y_pred = w * x + b

    # 计算损失
    loss = loss_fn(y_pred, y)

    # 反向传播
    loss.backward()

    # 更新参数
    optimizer.step()

    # 输出损失
    print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")

在这个例子中,optimizer.zero_grad()方法将模型参数wb的梯度清零,确保每次迭代时梯度的更新是基于最新的误差计算得到的。

0