1. 为什么需要训练过程可视化
在深度学习模型训练过程中,我们常常会遇到这样的困惑:模型训练了50个epoch,但最终效果不理想,到底是哪个环节出了问题?是学习率设置不当,还是batch size不合理?亦或是模型结构本身存在缺陷?这时候,训练过程可视化就成了我们诊断问题的"X光机"。
我曾在一次图像分类任务中,模型在验证集上的准确率始终卡在85%上不去。通过绘制损失曲线,发现训练损失持续下降但验证损失在某个点后开始上升——典型的过拟合现象。这个发现直接促使我调整了数据增强策略,最终将准确率提升到了92%。这就是可视化的力量。
Matplotlib作为Python生态中最经典的可视化工具,在PyTorch训练监控中有着不可替代的优势:
- 轻量级,无需复杂依赖
- 高度可定制化,能绘制任何你能想到的图表
- 与PyTorch无缝集成,数据提取方便
- 支持交互式操作,便于细节分析
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础可视化:损失曲线与准确率曲线
2.1 数据收集与存储
在PyTorch中实现训练监控,首先需要建立完善的数据记录机制。我推荐使用Python字典配合列表来存储训练过程中的关键指标:
python复制history = {
'train_loss': [],
'val_loss': [],
'train_acc': [],
'val_acc': [],
'lr': []
}
在每个epoch结束后,及时更新这些数据:
python复制history['train_loss'].append(train_loss.item())
history['val_loss'].append(val_loss.item())
history['train_acc'].append(train_correct / train_total)
history['val_acc'].append(val_correct / val_total)
history['lr'].append(optimizer.param_groups[0]['lr'])
注意:一定要使用.item()将Tensor转换为Python标量,否则会积累计算图导致内存泄漏
2.2 基础绘图实现
有了数据积累,就可以用Matplotlib绘制基础曲线了。这里分享我最常用的双纵坐标绘图模板:
python复制def plot_history(history):
fig, ax1 = plt.subplots(figsize=(10, 6))
# 绘制损失曲线
color = 'tab:red'
ax1.set_xlabel('Epoch')
ax1.set_ylabel('Loss', color=color)
ax1.plot(history['train_loss'], label='Train Loss', color=color, linestyle='--')
ax1.plot(history['val_loss'], label='Val Loss', color=color)
ax1.tick_params(axis='y', labelcolor=color)
# 创建第二个纵坐标
ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('Accuracy', color=color)
ax2.plot(history['train_acc'], label='Train Acc', color=color, linestyle='--')
ax2.plot(history['val_acc'], label='Val Acc', color=color)
ax2.tick_params(axis='y', labelcolor=color)
# 添加图例和标题
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper right')
plt.title('Training History')
plt.show()
这个模板的优势
