loss.backward()
时间: 2023-09-12 13:10:31 浏览: 82
`loss.backward()` 是 PyTorch 中用于计算梯度的函数,它会自动计算张量中每个参数的梯度。在神经网络中,我们通常将损失函数的梯度反向传播回每个神经元,以更新它们的权重和偏置项。这个过程就是反向传播算法。
在使用 PyTorch 进行深度学习时,通常需要执行以下步骤:
1. 定义模型结构
2. 定义损失函数
3. 执行前向传播
4. 计算损失函数
5. 执行反向传播
6. 更新模型参数
其中,`loss.backward()` 就是第 5 步中的反向传播过程,它会计算损失函数对每个参数的梯度。在执行这个函数之前,需要先将梯度清零,以避免梯度累加的问题。
示例代码如下:
```python
import torch
import torch.nn as nn
# 定义模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 2)
def forward(self, x):
x = self.fc1(x)
x = torch.relu(x)
x = self.fc2(x)
return x
# 创建模型和数据
model = Net()
inputs = torch.randn(3, 10)
labels = torch.tensor([[0, 1], [1, 0], [0, 1]])
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 前向传播
outputs = model(inputs)
# 计算损失函数
loss = criterion(outputs, labels.argmax(dim=1))
# 梯度清零
optimizer.zero_grad()
# 反向传播
loss.backward()
# 更新模型参数
optimizer.step()
```
在这个示例中,我们定义了一个包含两个全连接层的神经网络,并使用交叉熵损失函数作为模型的损失函数。我们首先执行前向传播,然后计算损失函数,并使用 `loss.backward()` 函数计算梯度。最后,我们使用优化器(这里是 SGD)更新模型参数。