目录
一、TensorBoard 发展历史与原理
1. 演进历程
2. 核心架构原理
二、TensorBoard 核心功能操作
1. 基础配置方法
2. 常用功能速查表
三、CIFAR10 实战演示
1. MLP 模型监控配置
2. CNN 特征可视化
四、TensorBoard 高级功能
1. 超参数调优
2. 3D点云可视化
五、启动与界面操作指南
1. 终端启动命令
2. 界面操作技巧
六、PyTorch Lightning 集成
自动日志记录配置
七、常见问题解决方案
TensorBoard 使用问题排查
八、最佳实践建议
一、TensorBoard 发展历史与原理
1. 演进历程
2. 核心架构原理
工作流程:
-
训练程序生成日志文件(
*.tfevents
) -
TensorBoard 服务监听日志目录
-
浏览器访问可视化面板
二、TensorBoard 核心功能操作
1. 基础配置方法
from torch.utils.tensorboard import SummaryWriter# 初始化写入器
writer = SummaryWriter(log_dir='runs/exp1', # 实验目录flush_secs=10 # 写入磁盘频率
)# 记录标量数据
writer.add_scalar('Loss/train', train_loss, global_step=epoch)# 记录图像
writer.add_image('Sample', img_tensor, global_step=epoch)# 记录模型图
writer.add_graph(model, input_tensor)# 关闭写入器
writer.close()
2. 常用功能速查表
功能 | 方法 | 适用场景 |
---|---|---|
标量图表 | add_scalar() | 损失/准确率跟踪 |
图像展示 | add_images() | 输入/输出可视化 |
模型结构 | add_graph() | 网络调试 |
直方图 | add_histogram() | 参数分布监控 |
嵌入向量 | add_embedding() | 高维数据降维 |
PR曲线 | add_pr_curve() | 分类阈值分析 |
三、CIFAR10 实战演示
1. MLP 模型监控配置
def train_mlp():writer = SummaryWriter('runs/cifar10_mlp')model = MLP().to(device)for epoch in range(10):model.train()for i, (inputs, labels) in enumerate(train_loader):# ...训练步骤...# 每100步记录一次if i % 100 == 0:writer.add_scalar('Loss/train', loss.item(), epoch*len(train_loader)+i)writer.add_scalar('Accuracy/train', acc, epoch*len(train_loader)+i)# 验证集记录val_acc = test(model, val_loader)writer.add_scalar('Accuracy/val', val_acc, epoch)# 记录参数分布for name, param in model.named_parameters():writer.add_histogram(f'params/{name}', param, epoch)writer.add_histogram(f'grads/{name}', param.grad, epoch)writer.close()
2. CNN 特征可视化
def train_cnn():writer = SummaryWriter('runs/cifar10_cnn')model = CNN().to(device)# 添加模型图dummy_input = torch.rand(1, 3, 32, 32).to(device)writer.add_graph(model, dummy_input)for epoch in range(10):# ...训练代码...# 记录特征图if epoch % 2 == 0:sample, _ = next(iter(val_loader))feature_maps = get_feature_maps(model, sample[0:1]) # 自定义获取特征图函数writer.add_images('FeatureMaps/conv1', feature_maps[0], epoch, dataformats='NCHW')# 记录混淆矩阵cm = compute_confusion_matrix(model, val_loader)writer.add_figure('ConfusionMatrix', plot_confusion_matrix(cm), epoch)writer.close()
四、TensorBoard 高级功能
1. 超参数调优
from torch.utils.tensorboard.summary import hparamsdef log_hparams(writer, config, metrics):# 记录超参数和最终指标writer.add_hparams(hparam_dict=config,metric_dict=metrics,run_name='hparam_tuning')# 使用示例
log_hparams(writer, {'lr': 0.01, 'bsize': 64},{'accuracy': 0.92, 'loss': 0.2})
2. 3D点云可视化
# 适用于3D计算机视觉任务
points = torch.rand(100, 3) # 100个3D点
labels = torch.randint(0, 5, (100,)) # 分类标签writer.add_embedding(points,metadata=labels,tag='3D_points',global_step=epoch
)
五、启动与界面操作指南
1. 终端启动命令
# 基本启动
tensorboard --logdir=runs
# 指定端口和主机
tensorboard --logdir=runs --port=6006 --host=0.0.0.0
# 多实验目录比较
tensorboard --logdir=run1:runs/exp1,run2:runs/exp2
2. 界面操作技巧
功能 | 操作方式 |
---|---|
平滑曲线 | 调整Smoothing滑块 |
下载数据 | 点击图表右上角下载按钮 |
对比实验 | 勾选左侧不同运行记录 |
3D旋转 | 鼠标拖拽3D可视化区域 |
六、PyTorch Lightning 集成
自动日志记录配置
import pytorch_lightning as pl
from pytorch_lightning.loggers import TensorBoardLoggerlogger = TensorBoardLogger(save_dir='lightning_logs',name='cifar10_experiment',version='v1.0'
)trainer = pl.Trainer(logger=logger,max_epochs=10,log_every_n_steps=50
)
trainer.fit(model)
七、常见问题解决方案
TensorBoard 使用问题排查
问题现象 | 可能原因 | 解决方案 |
---|---|---|
无数据显示 | 日志路径错误 | 检查--logdir参数匹配 |
图表异常 | 数据格式错误 | 验证张量形状和数据类型 |
加载缓慢 | 日志文件过大 | 减少记录频率或清理旧日志 |
无法访问 | 端口占用 | 更换端口或杀死占用进程 |
八、最佳实践建议
-
日志组织规范:
runs/
├── exp1/ # 实验1
├── exp2/ # 实验2
└── hparams/ # 超参数搜索 -
高效记录原则:
-
非必要不记录高频率数据
-
定期清理旧实验数据
-
对大型张量使用降采样
-
-
团队协作技巧:
# 将TensorBoard服务共享给团队
tensorboard dev upload --logdir runs \
--name "My Experiment" \
--description "CIFAR10 with ResNet18"
@浙大疏锦行