PyTorch训练中如何记录各轮次准确率等指标?求常规实现方案
PyTorch训练指标记录的业内常规实现方式
你用列表记录指标再转DataFrame存CSV的做法本身是可行的,但业内有更规范、可扩展的方案,主要分为两类:手动优化的轻量方案,和用成熟工具的方案。
一、手动优化的轻量方案(适合小项目/快速迭代)
你当前的列表方式可以优化,改用字典统一管理指标,避免单独维护多个列表,新增指标时更灵活:
def train(model, criterion, optimizer, scheduler, num_epochs=25): # 用字典统一存储所有指标,键为指标名称,值为对应历史列表 metrics_history = { 'train_loss': [], 'val_loss': [], 'train_acc': [], 'val_acc': [] } for epoch in range(num_epochs): # 此处写入你的训练、验证逻辑,计算当前轮次的各项指标 # train_loss, train_acc = ... # val_loss, val_acc = ... # 统一追加指标到字典对应列表 metrics_history['train_loss'].append(train_loss) metrics_history['train_acc'].append(train_acc) metrics_history['val_loss'].append(val_loss) metrics_history['val_acc'].append(val_acc) # 转DataFrame并保存,逻辑和你原本一致,但结构更清晰 import pandas as pd df = pd.DataFrame(metrics_history) df.to_csv('training_metrics.csv', index=False) return metrics_history
这种方式的优势是:新增指标(如F1分数、学习率)时,仅需在字典中添加对应键即可,无需额外定义新列表,代码更整洁易维护。
二、用专业实验追踪工具(适合中大型项目/长期实验)
业内做模型训练时,更常用成熟的实验追踪工具记录指标,这类工具不仅能存储数据,还支持实时可视化、实验对比、模型版本管理等功能,常用的有:
1. TensorBoard(PyTorch官方集成)
PyTorch原生支持TensorBoard,无需复杂依赖,就能实时查看指标曲线:
from torch.utils.tensorboard import SummaryWriter def train(model, criterion, optimizer, scheduler, num_epochs=25): # 初始化日志写入器,指定日志保存目录 writer = SummaryWriter(log_dir='./runs/training_exp_1') for epoch in range(num_epochs): # 计算训练、验证指标 train_loss, train_acc = train_one_epoch(model, criterion, optimizer, train_loader) val_loss, val_acc = validate(model, criterion, val_loader) # 将指标写入TensorBoard writer.add_scalar('Loss/Train', train_loss, epoch) writer.add_scalar('Loss/Val', val_loss, epoch) writer.add_scalar('Accuracy/Train', train_acc, epoch) writer.add_scalar('Accuracy/Val', val_acc, epoch) # 还可记录学习率、模型权重直方图等更多信息 writer.add_scalar('Learning Rate', optimizer.param_groups[0]['lr'], epoch) writer.close()
运行后,在终端执行tensorboard --logdir=runs,即可在浏览器中查看实时更新的指标曲线,直观追踪训练进度。
2. Weights & Biases(W&B)
这是业内流行的第三方实验管理工具,功能比TensorBoard更全面,支持实验对比、团队协作、自动保存代码与模型版本:
import wandb def train(model, criterion, optimizer, scheduler, num_epochs=25): # 初始化W&B项目,指定实验名称 wandb.init(project='my_pytorch_project', name='training_run_1') # 可将超参数同步记录,方便后续对比 wandb.config = { "learning_rate": optimizer.param_groups[0]['lr'], "epochs": num_epochs, "batch_size": train_loader.batch_size } for epoch in range(num_epochs): train_loss, train_acc = train_one_epoch(model, criterion, optimizer, train_loader) val_loss, val_acc = validate(model, criterion, val_loader) # 批量记录指标到云端 wandb.log({ "train_loss": train_loss, "train_acc": train_acc, "val_loss": val_loss, "val_acc": val_acc, "lr": optimizer.param_groups[0]['lr'] }, step=epoch) wandb.finish()
W&B会自动将所有数据同步到云端,你可在网页端随时查看、对比不同实验的结果,还能生成标准化的实验报告。
总结
- 小项目/快速验证:优先选择字典统一管理指标再存CSV,或用TensorBoard做轻量可视化。
- 中大型项目/长期实验:推荐使用W&B这类专业工具,能大幅提升实验管理效率与可追溯性。
内容的提问来源于stack exchange,提问作者test tes
相关产品推荐
相关产品推荐

