TensorBoard

以下是 TensorBoard 在 PyTorch 中的使用指南,涵盖安装、基础操作和高级功能,帮助你高效监控和可视化模型训练过程。


1. 安装与验证

安装
pip install tensorboard
验证安装
tensorboard --version  # 输出版本号,例如:2.12.0

2. 基础使用流程

步骤 1:导入 SummaryWriter
from torch.utils.tensorboard import SummaryWriter

# 创建 writer 对象,指定日志保存目录(默认:runs/当前时间)
writer = SummaryWriter("logs")  # 日志会保存在 ./logs 文件夹中
步骤 2:记录数据

记录标量(损失、准确率等)

for epoch in range(100):
    loss = 0.1 * (100 - epoch)  # 模拟损失值
    accuracy = 0.01 * epoch     # 模拟准确率
    
    # 记录单指标
    writer.add_scalar("Loss/train", loss, epoch)
    # 记录多指标(同一图表)
    writer.add_scalars("Metrics", {"train_loss": loss, "train_acc": accuracy}, epoch)

记录模型结构

model = ...  # 你的PyTorch模型
dummy_input = torch.randn(1, 3, 224, 224)  # 输入样例(batch_size=1, 3通道, 224x224图像)
writer.add_graph(model, dummy_input)  # 生成计算图

记录图像/特征图

images = torch.randn(8, 3, 224, 224)  # 模拟一批图像
writer.add_images("Training Samples", images, epoch)  # 记录图像批次

# 记录卷积层特征图(假设features是中间层的输出)
features = model.conv_layers(dummy_input)
writer.add_image("Feature Maps", features[0], epoch, dataformats="HW")  # 单通道特征图

记录直方图(权重分布)

for name, param in model.named_parameters():
    writer.add_histogram(f"Parameters/{name}", param, epoch)

3. 启动 TensorBoard 服务

在终端中运行以下命令(注意路径匹配):

tensorboard --logdir=logs --port=6006
  • --logdir:指定日志目录(与 SummaryWriter 的路径一致)。
  • --port:指定端口(默认6006,若冲突可改为其他端口如6007)。

访问浏览器:http://localhost:6006(或远程服务器IP:端口)。


4. 核心功能详解

Scalars(标量)
  • 监控训练/验证损失、准确率、学习率等指标。
  • 技巧:使用 / 命名层级(如 Loss/trainLoss/val),TensorBoard会自动分组。
Graphs(模型结构)
  • 可视化模型计算图,检查数据流和层连接。
  • 注意:确保 add_graph 的输入张量形状与实际数据一致。
Images(图像)
  • 查看输入数据、数据增强效果或中间特征图。
  • 支持格式:单张图像(add_image)或批次图像(add_images)。
Histograms(直方图)
  • 分析权重/偏置的分布变化,检测梯度消失或爆炸。
PR Curves & ROC(分类任务)
  • 记录精确率-召回率曲线或ROC曲线:
from torchmetrics import PrecisionRecallCurve
pr_curve = PrecisionRecallCurve(task="binary")
precision, recall, _ = pr_curve(predictions, labels)
writer.add_pr_curve("PR Curve", labels, predictions, epoch)

5. 高级功能

Embedding Projector(降维可视化)
# 记录嵌入向量(如特征提取后的高维数据)
embeddings = model.get_embeddings(data)  # 假设输出形状 [N, 512]
writer.add_embedding(embeddings, metadata=labels, label_img=images, global_step=epoch)
  • 在 TensorBoard 的 Projector 标签页中查看PCA/t-SNE降维结果。
Hyperparameter Tuning(超参数对比)
# 记录超参数和对应结果
writer.add_hparams(
    {"lr": 0.01, "batch_size": 32},
    {"hparam/accuracy": 0.95, "hparam/loss": 0.1},
)

6. 常见问题

Q1:TensorBoard 页面无数据?
  • 检查 --logdir 路径是否与 SummaryWriter 的路径一致。
  • 确保数据已写入日志(调用 writer.flush() 或关闭 writer)。
Q2:如何远程访问 TensorBoard?

在服务器运行:

tensorboard --logdir=logs --port=6006 --bind_all

本地通过 ssh 转发端口:

ssh -L 6006:localhost:6006 user@server_ip
Q3:日志文件过大?
  • 定期清理旧日志或按实验分目录保存(如 logs/exp1, logs/exp2)。
  • 使用 writer.close() 确保资源释放。

7. 完整代码示例

import torch
from torch.utils.tensorboard import SummaryWriter
from torchvision.models import resnet18

# 初始化
writer = SummaryWriter("logs")
model = resnet18(pretrained=False)
dummy_input = torch.randn(1, 3, 224, 224)

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

# 模拟训练循环
for epoch in range(100):
    loss = 0.1 * (100 - epoch)
    accuracy = 0.01 * epoch
    
    # 记录标量
    writer.add_scalar("Loss/train", loss, epoch)
    writer.add_scalars("Metrics", {"train_acc": accuracy}, epoch)
    
    # 记录直方图
    for name, param in model.named_parameters():
        writer.add_histogram(f"Params/{name}", param, epoch)

writer.close()

总结

  • 核心步骤:安装 → 创建 SummaryWriter → 记录数据 → 启动服务。
  • 常用方法add_scalar(标量)、add_graph(模型结构)、add_image(图像)、add_histogram(权重分布)。
  • 进阶功能:嵌入投影、超参数对比、PR曲线等。

掌握这些操作,你可以轻松实现训练过程的可视化与深度分析!

<think>好的,用户现在想了解如何在深度学习项目中使用TensorBoard进行可视化,特别是针对舌苔图像识别系统。用户之前的问题是关于基于深度学习的舌苔图像识别系统的实现方法,现在他们可能已经进入模型训练和调优阶段,需要可视化工具来监控训练过程和分析结果。首先,我需要回忆TensorBoard的主要功能,它能够跟踪和可视化损失、准确率等指标,展示计算图,直方图监控权重分布,以及嵌入可视化等。对于舌苔图像识别系统,用户可能需要关注这些方面,尤其是数据增强后的图像效果、模型训练动态、特征图的可视化等。接下来,结合用户之前提到的系统架构,比如使用EfficientNet-B0和PyTorch框架,我需要说明如何在PyTorch中集成TensorBoard。需要提到如何记录训练过程中的损失和准确率,如何可视化图像数据增强后的样本,以及如何监控模型参数的变化。此外,用户可能对混淆矩阵和PR曲线感兴趣,以评估分类性能,特别是多标签分类的情况,因为引用[1]提到舌象可能包含多种特征类型,需要分别训练不同的模型。 然后,用户可能关心如何将舌苔图像的特征图可视化,这可以帮助理解模型关注的区域是否符合中医专家的经验。例如,使用Grad-CAM等方法生成热力图,展示模型对舌苔颜色和厚度的关注点。需要给出具体的代码示例,比如如何在PyTorch中使用SummaryWriter来添加图像和标量。另外,用户可能希望优化训练过程,比如调整学习率或检测过拟合,这时候TensorBoard的平滑功能和对比不同实验的功能就很重要。需要指导用户如何利用这些功能进行超参数调优。最后,生成相关问题时要围绕TensorBoard的高级功能、多任务学习下的可视化、部署后的监控以及与其他工具的比较,这样可以帮助用户深入探索更多应用场景。</think>### TensorBoard在舌苔图像识别系统中的可视化应用方法 #### 一、基础功能配置 1. **训练过程监控** - **标量记录**:跟踪损失函数(如交叉熵损失$L = -\sum y_i \log(p_i)$)和准确率变化[^1] ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter('logs') # 训练循环内记录 writer.add_scalar('Train/Loss', loss.item(), global_step=epoch) writer.add_scalar('Val/Accuracy', accuracy, global_step=epoch) ``` 2. **计算图可视化** - 显示模型架构(如EfficientNet的层级结构) ```python dummy_input = torch.randn(1, 3, 224, 224) writer.add_graph(model, dummy_input) ``` #### 二、舌苔任务专用可视化 1. **数据增强效果验证** - 可视化HSV空间颜色抖动后的舌象样本: ```python augmented_images = next(iter(train_loader))[0] writer.add_images('Augmented/HSV_ColorJitter', augmented_images, epoch) ``` 2. **特征图可视化** - 展示EfficientNet中间层的特征激活(聚焦舌苔颜色/纹理区域): ```python features = model.backbone.extract_features(input_batch) writer.add_images('Features/Block3', features[:, 0:3, :, :], epoch) ``` 3. **多任务监控** - 针对不同舌象特征(舌色、苔厚、裂纹等)的独立训练曲线对比[^1] ```python for task_name in ['color', 'thickness', 'crack']: writer.add_scalar(f'Loss/{task_name}', task_loss, epoch) ``` #### 三、高级分析技巧 1. **权重分布监控** - 使用直方图观察全连接层参数变化: ```python for name, param in model.named_parameters(): if 'fc' in name: writer.add_histogram(f'Weights/{name}', param, epoch) ``` 2. **混淆矩阵生成** - 评估舌苔分类的混淆情况(需安装`matplotlib`): ```python from sklearn.metrics import confusion_matrix import seaborn as sns cm = confusion_matrix(true_labels, preds) fig = plt.figure() sns.heatmap(cm, annot=True) writer.add_figure('Confusion_Matrix', fig, epoch) ``` 3. **PR曲线绘制** - 针对多标签分类任务(如同时存在"厚苔"和"黄苔"的情况): ```python from sklearn.metrics import precision_recall_curve precision, recall, _ = precision_recall_curve(y_true, y_score) writer.add_pr_curve('PR_Curve/ThickCoating', y_true, y_score, epoch) ``` #### 四、部署后监控(需配合ONNX/TensorRT) ```python # 量化模型推理时间监控 with torch.no_grad(): start_time = time.time() outputs = quantized_model(input_tensor) writer.add_scalar('Inference_Time', time.time()-start_time, step) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值