如何绘制预训练/已保存训练模型的准确率曲线?训练后未绘图求助
解决方案:绘制预训练/已保存模型的准确率曲线
先回答你的第一个问题:当然可以!
绘制预训练模型的准确率曲线分两种场景:
- 如果是你自己训练的预训练模型:只要你保存了训练过程中的指标日志(比如Keras的
history对象,或者PyTorch里自己记录的日志文件),直接用这些数据就能画图; - 如果是公开的预训练模型(比如Hugging Face的BERT、TorchVision的ResNet):你需要准备对应的验证集/测试集,让模型在数据集上跑一遍,记录准确率数据后再绘图——如果想要类似训练过程的曲线,就得对预训练模型做微调,同时实时记录每轮的准确率。
重点解决你的第二个问题:训练后忘存曲线,仅保存了模型权重
这确实有点头疼,但能不能恢复要看你有没有留后手:
情况1:你保存了每个epoch的模型checkpoint(每轮训练完都存一个模型文件)
这是最理想的情况!你可以依次加载每个epoch的模型,在验证集上计算准确率,然后把这些数值连成曲线。以PyTorch为例,代码大概是这样:
import torch import matplotlib.pyplot as plt from torch.utils.data import DataLoader # 替换成你自己的数据集类和模型结构 from my_code import MyDataset, MyModel # 准备验证集(和训练时的预处理逻辑完全一致!) val_dataset = MyDataset(...) val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") acc_list = [] num_epochs = 10 # 替换成你实际训练的轮数 # 遍历每个epoch的checkpoint for epoch in range(1, num_epochs + 1): # 初始化模型 model = MyModel().to(device) # 加载对应epoch的权重 checkpoint = torch.load(f"model_epoch_{epoch}.pth") model.load_state_dict(checkpoint["model_state_dict"]) model.eval() # 计算验证集准确率 correct = 0 total = 0 with torch.no_grad(): for inputs, labels in val_loader: inputs, labels = inputs.to(device), labels.to(device) outputs = model(inputs) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() acc = correct / total acc_list.append(acc) print(f"Epoch {epoch} 验证准确率: {acc:.4f}") # 绘制曲线 plt.figure(figsize=(8, 6)) plt.plot(range(1, num_epochs+1), acc_list, label="Validation Accuracy") plt.xlabel("Epoch") plt.ylabel("Accuracy") plt.title("模型验证准确率曲线") plt.legend() plt.show()
如果用Keras,思路是一样的:加载每个epoch保存的模型,用model.evaluate()计算准确率,再收集数据绘图。
情况2:只保存了最终的模型权重,没有任何训练日志或checkpoint
很遗憾,这种情况下你无法恢复训练过程中的准确率曲线——因为训练时每轮的准确率是实时计算并临时存储的,没保存的话就彻底丢失了。
不过你还有两个选择:
- 用最终模型在验证集/测试集上得到一个单一的准确率数值;
- 从加载的模型开始,继续训练一小段时间,同时记录新的准确率(但这不是你原来8小时训练的曲线,只是后续训练的)。
给你的小提醒
以后训练模型时,一定要记得同时保存:
- 训练过程的指标日志(比如Keras用
np.save('history.npy', history.history),PyTorch可以用logging模块把每轮的acc/loss写到文件里); - 每个epoch的模型checkpoint(哪怕最终只保留最优模型,中间的checkpoint在需要复盘时非常有用)。
内容的提问来源于stack exchange,提问作者Poopin Mah Business
相关产品推荐
相关产品推荐

