要将训练过程实时接入 TensorBoard,核心是在训练代码里埋入 SummaryWriter。无论用 PyTorch 还是 TensorFlow,流程完全一样。
下面必须用 PyTorch,以下是零基础到跑通的完整做法:
第一步:导入并初始化
如果 which tensorboard 没有输出,则安装:
bash
pip install tensorboard
在训练脚本开头:
python
from torch.utils.tensorboard import SummaryWriter
# 日志会保存在当前目录的 runs/ 文件夹下
writer = SummaryWriter()
第二步:在训练循环里埋点(最常用的三个位置)
python
for epoch in range(num_epochs):
train_loss = 0.0
correct = 0
total = 0
for i, (data, label) in enumerate(train_loader):
data, label = data.to(device), label.to(device)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, label)
loss.backward()
optimizer.step()
# ─── 累计指标(之前缺失的部分)───
train_loss += loss.item() * data.size(0) # 累计总损失(乘以 batch 样本数)
_, predicted = output.max(1) # 获取预测类别
total += label.size(0) # 累计总样本数
correct += predicted.eq(label).sum().item() # 累计正确预测数
# ─── 此处埋点:每 N 个 batch 记录一次 ───
global_step = epoch * len(train_loader) + i
if i % 20 == 0: # 每 20 个 batch 记录一次
writer.add_scalar('Loss/train', loss.item(), global_step)
writer.add_scalar('LR', optimizer.param_groups[0]['lr'], global_step)
# ─── 此处埋点:每个 epoch 结束记录一次 ───
avg_loss = train_loss / total
accuracy = 100.0 * correct / total
writer.add_scalar('Loss/epoch_train', avg_loss, epoch)
writer.add_scalar('Accuracy/epoch_train', accuracy, epoch)
# ─── 验证阶段同样记录 ───
val_loss, val_acc = validate(model, val_loader, criterion)
writer.add_scalar('Loss/epoch_val', val_loss, epoch)
writer.add_scalar('Accuracy/epoch_val', val_acc, epoch)
# 记录模型结构图(仅在第一个 epoch 执行)
if epoch == 0:
writer.add_graph(model, data)
writer.close()
第三步:启动 TensorBoard 看板
另开一个终端,在训练脚本同级目录下执行:
bash
tensorboard --logdir=runs --port=6006
然后在浏览器打开 http://localhost:6006,就能看到实时刷新的损失曲线和准确率。
常用埋点速查表
| 需要看的 | 代码 | 说明 |
|---|---|---|
| 损失/准确率曲线 | writer.add_scalar('标签名', 数值, step) |
最常用,标量折线图 |
| 模型结构图 | writer.add_graph(model, input_tensor) |
检查网络结构是否正确 |
| 权重/梯度分布 | writer.add_histogram('weights', param, epoch) |
观察是否梯度消失/爆炸 |
| 图片/数据样本 | writer.add_images('images', data[:8]) |
可视化数据增强效果 |
| 超参数对比 | 多个 logdir 启动 TensorBoard |
不同 lr、batch_size 的曲线放一起对比 |
一个小优化:远程服务器查看
如果训练在远程服务器上,本地浏览器看不了,在服务器上启动时加绑定:
bash
tensorboard --logdir=runs --host=0.0.0.0 --port=6006
然后在本地浏览器访问 http://服务器IP:6006。
最简上手版
如果只想看 loss 曲线,在训练循环里加这两行就足够了:
python
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
# 训练循环里
writer.add_scalar('Loss', loss.item(), global_step)
然后 tensorboard --logdir=runs 启动,立刻就能看到。