如何用Matplotlib基于已收集指标绘制4幅独立多学习率曲线图表?
4幅独立学习曲线绘制方案
实现思路
利用Matplotlib的子图布局功能,创建2×2的独立画布,分别对应训练损失、验证损失、训练准确率、验证准确率四类指标,彻底避免所有数据叠加在同一图中。
示例代码
假设你已收集到如下格式的训练数据(替换为你实际的变量名即可):
train_loss_dict: 键为学习率,值为对应训练损失列表(按epoch顺序)val_loss_dict: 键为学习率,值为对应验证损失列表train_acc_dict: 键为学习率,值为对应训练准确率列表val_acc_dict: 键为学习率,值为对应验证准确率列表epochs: 训练的总轮次(可通过range(1, len(train_loss_dict[某学习率])+1)生成)
import matplotlib.pyplot as plt # 1. 创建2×2的子图布局,设置画布大小 fig, axes = plt.subplots(2, 2, figsize=(14, 10)) # 2. 绘制训练损失曲线 ax1 = axes[0, 0] for lr, losses in train_loss_dict.items(): ax1.plot(epochs, losses, label=f"LR={lr}") ax1.set_title("Train Loss vs Epochs") ax1.set_xlabel("Epochs") ax1.set_ylabel("Loss") ax1.legend() ax1.grid(True) # 3. 绘制验证损失曲线 ax2 = axes[0, 1] for lr, losses in val_loss_dict.items(): ax2.plot(epochs, losses, label=f"LR={lr}") ax2.set_title("Validation Loss vs Epochs") ax2.set_xlabel("Epochs") ax2.set_ylabel("Loss") ax2.legend() ax2.grid(True) # 4. 绘制训练准确率曲线 ax3 = axes[1, 0] for lr, accs in train_acc_dict.items(): ax3.plot(epochs, accs, label=f"LR={lr}") ax3.set_title("Train Accuracy vs Epochs") ax3.set_xlabel("Epochs") ax3.set_ylabel("Accuracy") ax3.legend() ax3.grid(True) # 5. 绘制验证准确率曲线 ax4 = axes[1, 1] for lr, accs in val_acc_dict.items(): ax4.plot(epochs, accs, label=f"LR={lr}") ax4.set_title("Validation Accuracy vs Epochs") ax4.set_xlabel("Epochs") ax4.set_ylabel("Accuracy") ax4.legend() ax4.grid(True) # 调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键说明
- 每个子图通过
axes[row, col]单独控制,互不干扰,彻底解决数据叠加问题 - 如果是单学习率场景,直接去掉循环,传入单条数据列表即可
- 可根据需求调整
figsize、线条颜色、网格样式等参数
内容的提问来源于stack exchange,提问作者Shiven08
相关产品推荐
相关产品推荐

