PyTorch模型训练:前向传播、损失计算、反向传播和优化
PyTorch模型训练:前向传播、损失计算、反向传播和优化
本节代码展示了PyTorch模型训练的典型步骤,包括前向传播、损失计算、反向传播和优化。
outputs, _ = model(inputs) # 前向传播
# 将标签重塑为 (batch_size*seq_len, 1, h, w)
labels = labels.view(-1, 1, h, w)
# 计算损失
loss = criterion(outputs, labels) # 计算损失函数
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 记录训练过程中的损失和精度
train_loss += loss.item()
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels.data).sum().item()
# 打印训练过程中的损失和精度
if (i+1) % print_freq == 0:
print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%'.format(epoch+1, num_epochs, i+1, total_step, train_loss/total_step, 100 * correct / total))
代码解析:
- 前向传播:
outputs, _ = model(inputs)使用模型对输入数据进行前向传播,得到模型的输出。 - 损失计算:
loss = criterion(outputs, labels)使用损失函数计算模型输出与真实标签之间的差异。 - 反向传播:
loss.backward()计算损失函数关于模型参数的梯度。 - 优化:
optimizer.step()使用优化器根据计算得到的梯度更新模型参数。 - 记录训练过程: 代码记录训练过程中损失和精度,并以一定频率打印训练结果。
注意: 为了提高代码可读性,代码中使用了 _ 来表示不需要使用的变量,例如 outputs, _ = model(inputs) 中的 _。
相关链接:
原文地址: https://www.cveoy.top/t/topic/m30Q 著作权归作者所有。请勿转载和采集!