TensorBoard 训练可视化

FreeGuideOnline 最新 2026-07-12

bash pip install tensorboard


如果你使用 PyTorch,建议额外安装 `torch.utils.tensorboard`(从 PyTorch 1.1 开始已内置),无需额外操作。

验证安装:
```bash
tensorboard --version

基本工作流程

  1. 在训练脚本中写入日志(事件文件)。
  2. 在终端启动 TensorBoard 并指定日志目录。
  3. 在浏览器打开 http://localhost:6006 查看面板。

下面分别演示不同框架的日志记录方式。

用 TensorFlow / Keras 记录日志

Keras 提供 TensorBoard 回调函数,这是最便捷的方式。

import tensorflow as tf
from tensorflow.keras.callbacks import TensorBoard

# 创建模型
model = tf.keras.models.Sequential([...])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 配置回调,日志保存到 ./logs 目录
tensorboard_callback = TensorBoard(log_dir='./logs', histogram_freq=1)

# 开始训练,将回调传入 fit
model.fit(x_train, y_train, 
          epochs=10,
          validation_data=(x_val, y_val),
          callbacks=[tensorboard_callback])

参数说明:

  • log_dir:日志存储路径,建议每次实验使用带时间戳的子目录,方便对比。
  • histogram_freq:每多少个 epoch 记录一次权重和梯度的直方图(设为 0 表示不记录)。
  • write_graph:是否记录模型图(默认 True)。
  • write_images:是否将模型权重可视化为图片。

启动 TensorBoard:

tensorboard --logdir=./logs

用 PyTorch 记录日志

PyTorch 从 1.1 开始内置了 SummaryWriter,API 与 TensorBoardX 几乎一致。

from torch.utils.tensorboard import SummaryWriter
import torch
import torch.nn as nn
import torch.optim as optim

# 创建写入器,日志存放在 runs/ 下带时间戳的文件夹
writer = SummaryWriter('runs/experiment_1')

# 模拟一个简单模型和训练循环
model = nn.Linear(10, 2)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

for epoch in range(10):
    # 模拟数据
    dummy_input = torch.randn(5, 10)
    dummy_target = torch.randn(5, 2)
    
    optimizer.zero_grad()
    output = model(dummy_input)
    loss = criterion(output, dummy_target)
    loss.backward()
    optimizer.step()
    
    # 记录标量(损失、准确率等)
    writer.add_scalar('Loss/train', loss.item(), epoch)
    
    # 记录模型权重直方图
    for name, param in model.named_parameters():
        writer.add_histogram(f'Weights/{name}', param, epoch)
        writer.add_histogram(f'Gradients/{name}', param.grad, epoch)

# 记录模型图
writer.add_graph(model, dummy_input)

writer.close()

启动 TensorBoard:

tensorboard --logdir=runs

TensorBoard 界面详解

打开浏览器后默认显示 SCALARS 面板。左侧栏可选择不同标签页。

SCALARS:标量面板

展示所有 add_scalar 记录的数值变化。你可以:

  • 平滑曲线:侧边栏的 Smoothing 滑块调整平滑度。
  • 横轴切换:相对时间、绝对时间、步数。
  • 分栏对比:将不同运行放在一起,比较训练集和验证集。

GRAPHS:计算图面板

可视化模型操作图,便于理解模型结构。节点颜色代表计算设备,点击节点可查看详细属性。对于 PyTorch 的 add_graph,需要模型以 torch.jit.ScriptModule 形式传入,直接传入普通模型也可用但可能显示不完整。

DISTRIBUTIONS 和 HISTOGRAMS:分布与直方图

记录权重、偏置、梯度的分布随时间的变化。常用于诊断梯度消失/爆炸、权重更新是否合理。add_histogram 记录的直方图会同时出现在这两个面板,但呈现形式不同。

IMAGES、TEXT、AUDIO

可以记录单张或多张图像,帮助观察生成对抗网络 (GAN) 的输出、数据增强结果等。

# 记录图像
img_batch = torch.randn(3, 224, 224)  # 假设一个批次图像
writer.add_image('example_images', make_grid(img_batch), global_step=0)

文本记录适合展示处理后的文本或指标摘要。

EMBEDDINGS:嵌入投影

用于高维数据降维可视化(如词向量、特征表示)。需要记录嵌入矩阵和元数据标签。

writer.add_embedding(features, metadata=labels, label_img=images, global_step=0)

HPARAMS:超参数对比

通过日志记录不同超参数组合下的最终指标,TensorBoard 会自动生成表格视图和平行坐标图,便于筛选最佳参数。

如何对比多次实验

每次训练使用不同的日志子目录,例如:

logs/
  run_20250301_lr0.001/
  run_20250301_lr0.01/
  run_20250302/

启动时指定上级目录:

tensorboard --logdir=logs

在界面左上角,勾选多个运行,它们的指标曲线会叠加在同一个图表中,方便对比。还可以利用正则表达式过滤器快速筛选运行名称。

远程服务器上的 TensorBoard

当深度学习程序运行在远程服务器时,可以通过端口转发在本机查看:

# 在服务器上启动,绑定所有 IP
tensorboard --logdir=logs --bind_all

# 本机建立 SSH 隧道(假设服务器 IP 为 192.168.1.100,端口 6006)
ssh -L 6006:localhost:6006 user@192.168.1.100

然后在浏览器访问 http://localhost:6006

常用操作与实用技巧

  • 清理旧日志:直接删掉不需要的实验文件夹,TensorBoard 会自动刷新列表。
  • 加载时过滤子目录tensorboard --logdir_spec=experiment1:./logs/exp1,experiment2:./logs/exp2 可给不同日志目录起别名。
  • 高亮区间:在 SCALARS 面板用鼠标拖选曲线区域,可以看到该区域的统计值(最小值、最大值、均值等)。
  • 截图保存:使用浏览器的“导出为 PNG”或截屏保存对比图。
  • 自动重载:默认每 30 秒自动检测新数据,可在设置中调整。

常见问题排查

Q: TensorBoard 显示“No dashboards are active for the current data set.”
A: 确认日志路径是否正确,且日志文件中包含至少一种支持的类型。用 tensorboard --inspect 检查日志内容。

tensorboard --inspect --logdir=./logs