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))

代码解析:

  1. 前向传播: outputs, _ = model(inputs) 使用模型对输入数据进行前向传播,得到模型的输出。
  2. 损失计算: loss = criterion(outputs, labels) 使用损失函数计算模型输出与真实标签之间的差异。
  3. 反向传播: loss.backward() 计算损失函数关于模型参数的梯度。
  4. 优化: optimizer.step() 使用优化器根据计算得到的梯度更新模型参数。
  5. 记录训练过程: 代码记录训练过程中损失和精度,并以一定频率打印训练结果。

注意: 为了提高代码可读性,代码中使用了 _ 来表示不需要使用的变量,例如 outputs, _ = model(inputs) 中的 _

相关链接:

PyTorch模型训练:前向传播、损失计算、反向传播和优化

原文地址: https://www.cveoy.top/t/topic/m30Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录