无法用Matplotlib可视化训练与测试准确率,请求技术协助
问题解决:训练指标Matplotlib可视化异常
问题分析
从你提供的图表来看,当前可视化存在两个核心问题:
plt.show()之后调用plt.savefig(),会导致保存的图片为空白——因为plt.show()会清空当前画布内容- 若
loss_list、train_acc、test_acc长度不一致,会导致曲线x轴对齐混乱,图表逻辑出错
修正后的代码
#%% Saving Training Model torch.save(net.state_dict(), 'trained_model.pth') print("Trained model saved.") #%% print("Loss list: ", loss_list) print("Test accuracy: ", test_acc) print("Train accuracy: ", train_acc) #%% visualize # 校验数据长度一致性(每个epoch对应一组指标) assert len(loss_list) == len(train_acc) == len(test_acc), "数据列表长度不匹配,请检查指标记录逻辑" fig, ax1 = plt.subplots(figsize=(10,6)) # 增大画布提升可读性 ax1.plot(loss_list, label="Loss", color="black", linewidth=2) ax1.set_xlabel('Epoch', fontsize=12) ax1.set_ylabel('Loss', fontsize=12) ax1.tick_params(axis='both', labelsize=10) ax2 = ax1.twinx() # 统一使用loss_list的长度作为x轴,保证三条曲线epoch对齐 ax2.plot(range(len(loss_list)), np.array(test_acc)/100, label="Test Acc", color="red", linewidth=2) ax2.plot(range(len(loss_list)), np.array(train_acc)/100, label="Train Acc", color="blue", linewidth=2) ax2.set_ylabel('Accuracy', fontsize=12) ax2.tick_params(axis='both', labelsize=10) # 合并图例避免重叠 lines1, labels1 = ax1.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right', fontsize=10) plt.title("Training Loss & Accuracy Curve", fontsize=14, pad=15) fig.tight_layout() # 先保存再显示,避免画布清空导致空白图 plt.savefig('resultus_LSIFIR.PNG', dpi=300, bbox_inches='tight') plt.show() print("Training Results Saved.") #%% Load Model if You Want loaded_model = Net() loaded_model.load_state_dict(torch.load('trained_model.pth')) print("Trained Model Loaded")
关键修正点
- 调整保存顺序:将
plt.savefig()移至plt.show()之前,避免画布清空导致的空白问题 - 数据对齐校验:添加断言确保三类指标列表长度一致,保证epoch对应关系正确
- 可读性优化:增大画布尺寸、线条宽度与字体大小,合并图例避免重叠遮挡
- 统一x轴范围:所有曲线使用相同的x轴基准,确保训练过程的指标变化趋势对齐
内容的提问来源于stack exchange,提问作者Froggremann
相关产品推荐
相关产品推荐

