训练指标监控:实时追踪损失、梯度与系统指标
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)