训练指标监控:实时追踪损失、梯度与系统指标

FreeGuideOnline 最新 2026-06-28

python

PyTorch 示例

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('runs/experiment_1') for epoch in range(epochs): # 训练循环... writer.add_scalar('Loss/train', train_loss, epoch) writer.add_scalar('Loss/val', val_loss, epoch) writer.add_histogram('gradients/conv1', conv1_grad, epoch) writer.close()


启动:`tensorboard --logdir=runs`,浏览器打开 `localhost:6006` 即可查看实时曲线和直方图。

### Weights & Biases (wandb)

提供更丰富的云端实验跟踪、超参数对比和团队协作功能。

```python
import wandb
wandb.init(project="my-project")
wandb.log({"loss": loss, "gradient_norm": grad_norm})

MLflow

一个开源平台,覆盖实验跟踪、模型注册和服务部署,适合全生命周期管理。

自定义监控脚本

对于轻量级需求,可使用 matplotlib 动态绘制曲线,或通过 logging + 文件存储指标,再用简单脚本读取画图。

实战:构建一个完整的监控循环

以下伪代码展示一个健全的监控框架:

for epoch in range(NUM_EPOCHS):
    model.train()
    for batch in train_loader:
        optimizer.zero_grad()
        loss = criterion(model(batch))
        loss.backward()

        # 记录梯度范数(反向传播后、优化器更新前)
        total_norm = 0
        for p in model.parameters():
            param_norm = p.grad.data.norm(2)
            total_norm += param_norm.item() ** 2
        total_norm = total_norm ** 0.5
        logging_steps(total_norm, 'grad_norm')

        # 梯度裁剪
        torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

        optimizer.step()
        logging_steps(loss.item(), 'train_loss')

    # 验证阶段记录指标
    val_loss, val_acc = evaluate(model, val_loader)
    logging_epochs(val_loss, 'val_loss', epoch)
    # 记录学习率和系统指标
    current_lr = scheduler.get_last_lr()[0]
    logging_epochs(current_lr, 'learning_rate', epoch)