You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制预训练/已保存训练模型的准确率曲线?训练后未绘图求助

解决方案:绘制预训练/已保存模型的准确率曲线

先回答你的第一个问题:当然可以!

绘制预训练模型的准确率曲线分两种场景:

  • 如果是你自己训练的预训练模型:只要你保存了训练过程中的指标日志(比如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

很遗憾,这种情况下你无法恢复训练过程中的准确率曲线——因为训练时每轮的准确率是实时计算并临时存储的,没保存的话就彻底丢失了。

不过你还有两个选择:

  1. 用最终模型在验证集/测试集上得到一个单一的准确率数值;
  2. 从加载的模型开始,继续训练一小段时间,同时记录新的准确率(但这不是你原来8小时训练的曲线,只是后续训练的)。

给你的小提醒

以后训练模型时,一定要记得同时保存:

  • 训练过程的指标日志(比如Keras用np.save('history.npy', history.history),PyTorch可以用logging模块把每轮的acc/loss写到文件里);
  • 每个epoch的模型checkpoint(哪怕最终只保留最优模型,中间的checkpoint在需要复盘时非常有用)。

内容的提问来源于stack exchange,提问作者Poopin Mah Business

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:55:39