TensorBoard 训练可视化
bash pip install tensorboard
如果你使用 PyTorch,建议额外安装 `torch.utils.tensorboard`(从 PyTorch 1.1 开始已内置),无需额外操作。
验证安装:
```bash
tensorboard --version
基本工作流程
- 在训练脚本中写入日志(事件文件)。
- 在终端启动 TensorBoard 并指定日志目录。
- 在浏览器打开
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