目錄
一、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"
@浙大疏錦行