pytorch训练可视化工具---TensorBoard

一、目的:为什么使用 TensorBoard 调控模型

使用 TensorBoard 可以帮我们:

  1. 实时查看 loss / acc 曲线 → 判断是否过拟合、欠拟合;

  2. 对比不同模型或超参数的效果

  3. 可视化模型结构 → 帮助调试模型设计;

  4. 查看权重/梯度分布 → 分析训练稳定性;

  5. 可视化预测结果、特征图、embedding → 提升模型可解释性;

  6. 管理实验结果、超参数组合


二、训练中可视化调控的功能详解(附代码)

1. 可视化 loss / accuracy 曲线

python 复制代码
writer.add_scalar("Loss/train", train_loss, epoch)
writer.add_scalar("Loss/val", val_loss, epoch)
writer.add_scalar("Acc/train", train_acc, epoch)
writer.add_scalar("Acc/val", val_acc, epoch)

用途

  • 判断训练过程是否收敛;

  • 验证集 loss 高于训练集 → 可能过拟合;

  • loss 一直不下降 → 学习率可能过高或模型设计问题。


2. 可视化模型结构

python 复制代码
from torch.utils.tensorboard import SummaryWriter

model = MyModel()
dummy_input = torch.randn(1, 3, 224, 224)
writer.add_graph(model, dummy_input)

用途

  • 检查模型结构是否正确;

  • 直观看到各层连接顺序。


3. 可视化权重分布(Histogram)

python 复制代码
for name, param in model.named_parameters():
    writer.add_histogram(name, param, epoch)

用途

  • 观察参数值分布是否爆炸或消失;

  • 梯度消失或爆炸时通常 histogram 变化异常。


4. 可视化预测图像、标签、特征图

python 复制代码
import torchvision.utils as vutils

# 展示输入图像和预测结果
writer.add_images("Input/Image", input_tensor, epoch)
writer.add_images("Predict/Output", output_tensor, epoch)
writer.add_images("GroundTruth/Label", label_tensor, epoch)

用途

  • 视觉任务(如分割、分类)中快速检查模型预测是否合理。

5. 可视化 Embedding(高维向量降维)

python 复制代码
# features: [N, D], labels: [N], images: [N, C, H, W]
writer.add_embedding(features, metadata=labels, label_img=images, global_step=epoch)

用途

  • 检查不同类别是否在特征空间中聚类良好;

  • Embedding 层是否学习到有效的表示。


6. 超参数记录与对比(add_hparams)

python 复制代码
writer.add_hparams(
    {'lr': 0.001, 'batch_size': 32},
    {'hparam/accuracy': acc, 'hparam/loss': loss}
)

用途

  • 对比不同超参数下的模型效果;

  • 自动生成汇总表格。


7. 可视化学习率变化(学习率调度)

python 复制代码
lr = optimizer.param_groups[0]['lr']
writer.add_scalar("LR", lr, epoch)

用途

  • 学习率调度策略是否生效;

  • 与 loss 的变化相互印证。


三、训练中综合应用示例(完整代码框架)

python 复制代码
from torch.utils.tensorboard import SummaryWriter
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms

# 准备
writer = SummaryWriter(log_dir='runs/exp1')
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 数据
transform = transforms.ToTensor()
train_loader = torch.utils.data.DataLoader(
    torchvision.datasets.MNIST('.', train=True, download=True, transform=transform),
    batch_size=64, shuffle=True)

# 模型
model = nn.Sequential(
    nn.Flatten(),
    nn.Linear(28*28, 128),
    nn.ReLU(),
    nn.Linear(128, 10)
).to(device)

# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 添加模型结构
writer.add_graph(model, torch.randn(1, 1, 28, 28).to(device))

# 训练
for epoch in range(5):
    total_loss = 0
    correct = 0

    for images, labels in train_loader:
        images, labels = images.to(device), labels.to(device)

        outputs = model(images)
        loss = criterion(outputs, labels)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        total_loss += loss.item()
        _, predicted = outputs.max(1)
        correct += predicted.eq(labels).sum().item()

    avg_loss = total_loss / len(train_loader)
    accuracy = correct / len(train_loader.dataset)

    writer.add_scalar("Loss/train", avg_loss, epoch)
    writer.add_scalar("Acc/train", accuracy, epoch)
    writer.add_scalar("LR", optimizer.param_groups[0]['lr'], epoch)

    # 权重分布
    for name, param in model.named_parameters():
        writer.add_histogram(name, param, epoch)

    # 可视化输入图像
    img_grid = torchvision.utils.make_grid(images[:16].cpu())
    writer.add_image("Sample Inputs", img_grid, epoch)

writer.close()

四、进阶建议

功能 说明
多实验对比 使用 SummaryWriter(log_dir=f"runs/lr_{lr}_bs_{bs}") 多次训练
与 wandb 联动 用 wandb 替代 TensorBoard,支持自动超参搜索
TensorBoard.dev 上传训练记录到云端,便于展示或记录

五、总结表格(常用 API)

功能 API
标量值(loss) add_scalar(tag, value, step)
图像 add_image(tag, image_tensor, step)
多图像 add_images(tag, batch_tensor, step)
模型结构 add_graph(model, input_tensor)
参数直方图 add_histogram(tag, values, step)
超参对比 add_hparams(dict, metrics)
Embedding add_embedding(features, labels, images)
相关推荐
算家云2 分钟前
“液态玻璃”难解苹果AI焦虑:WWDC25背后的信任危机
人工智能·算力·算家云·租算力,到算家云·wwdc25·苹果ai·ios 26
琼方16 分钟前
“十五五”时期智慧城市赋能全国一体化数据市场建设:战略路径与政策建议[ 注:本建议基于公开政策文件与行业实践研究,数据引用截至2025年6月11日。]
大数据·人工智能·智慧城市
飞哥数智坊18 分钟前
深夜1点被粉丝问懵?10分钟打造“AI分身”接管公众号答疑,亲测好用!
人工智能
Gsen281920 分钟前
AI大模型从0到1记录学习 大模型技术之机器学习 day27-day60
人工智能·学习·机器学习
四川兔兔22 分钟前
pytorch 之 nn 库与调试
人工智能·pytorch·python
終不似少年遊*34 分钟前
机器学习方法实现数独矩阵识别器
人工智能·python·opencv·机器学习·计算机视觉·矩阵
技术程序猿华锋1 小时前
重新定义 AI 协同:三款开源 MCP 工具开启智能体从“聊天”到“操控”
人工智能·开源
「、皓子~1 小时前
AI创作系列(2):UniApp跨端开发实战 - 海狸IM移动端完全由AI编写
开发语言·人工智能·uni-app·开源·vue·开源软件·ai编程
Sui_Network1 小时前
WAYE.ai 为Sui 上 AI 的下一个时代赋能
大数据·前端·人工智能·物联网·游戏
BAOYUCompany1 小时前
暴雨亮相2025中关村论坛数字金融与金融安全大会
大数据·人工智能