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

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

使用 TensorBoard 可以帮我们:

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

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

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

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

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

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


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

 1. 可视化 loss / accuracy 曲线

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. 可视化模型结构

from torch.utils.tensorboard import SummaryWritermodel = MyModel()
dummy_input = torch.randn(1, 3, 224, 224)
writer.add_graph(model, dummy_input)

 用途

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

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


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

for name, param in model.named_parameters():writer.add_histogram(name, param, epoch)

用途

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

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


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

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(高维向量降维)

# 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)

writer.add_hparams({'lr': 0.001, 'batch_size': 32},{'hparam/accuracy': acc, 'hparam/loss': loss}
)

 用途

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

  • 自动生成汇总表格。


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

lr = optimizer.param_groups[0]['lr']
writer.add_scalar("LR", lr, epoch)

 用途

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

  • 与 loss 的变化相互印证。


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

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 = 0correct = 0for 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)
Embeddingadd_embedding(features, labels, images)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习知识自然语言处理入门

一、引言:当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理(NLP)的世界里,计算机要理解人类语言,首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”,例…

Linux-线程概念和控制

1.Linux线程概念 1.1什么是线程 • 在⼀个程序⾥的⼀个执⾏路线就叫做线程(thread)。更准确的定义是:线程是“⼀个进程内部 的控制序列” • ⼀切进程⾄少都有⼀个执⾏线程 • 线程在进程内部运⾏,本质是在进程地址空间内运⾏…

【氮化镓】低剂量率对GaN HEMT栅极漏电的影响

2024 年 2 月 22 日,中国科学院新疆理化技术研究所的Li等人在《IEEE ACCESS》期刊发表了题为《Degradation Mechanisms of Gate Leakage in GaN-Based HEMTs at Low Dose Rate Irradiation》的文章,基于实验分析和 TCAD 仿真,研究了低剂量率辐照下基于 GaN 的 p 型栅高电子迁…

.NET Core 中 Swagger 配置详解:常用配置与实战技巧

随着微服务架构和 RESTful API 的广泛应用,API 文档的管理和自动化生成成为了开发中的重要部分。Swagger(现为 OpenAPI)是一款功能强大的工具,它可以自动生成 API 文档,并提供交互式 UI,帮助开发者、测试人…

海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像

做项目的时候,有时候手抖,一不小心把一个成熟稳定的项目的相机配置,重置了,如何进行恢复呢,在不知道之前配置数据的情况下。 我在做项目的时候,为了让这个相机成像稳定一点,尤其是做颜色检测时…

【八股战神篇】Java虚拟机(JVM)高频面试题

目录 专栏简介 一 请解释Java虚拟机(JVM)及其主要功能 延伸 1. JVM的基本概念 2. JVM的主要功能 二 对象创建的过程了解吗 延伸 1.Java 创建对象的四种常见方式 三 什么是双亲委派模型 延伸 1.双亲委派机制的作用: 2.双亲委派模型的核心思想: 3.双亲委派模型的…

win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹

在尝试删除路径为.../bak/sql的文件时,系统提示无权限操作。然而,关闭SQLyog后,删除操作成功完成。这表明SQLyog可能正在占用该文件,导致删除权限受限。关闭SQLyog后,文件被释放,删除操作得以顺利进行。建议…

Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN

简单来讲,Oracle为了高效管理BUFFER CACHE主要使用以下2种LRU列: LRU列,又叫替换列(replacement list),其中又分为主列和辅助列。 主列:已使用的缓冲区列,分为HOT和COLD区域。HOT区…

C++:迭代器

迭代器的本质&#xff1a;对象。 迭代器与指针类似&#xff0c;通过迭代器可以指向容器中的某个元素&#xff0c;还可以对元素进行操作。 迭代器统一规范了遍历方式。不同的数据结构可以用统一的方式去遍历。 接下来是一个自定义迭代器的代码示例。 #include<iostream&g…

(4)Java虚拟线程与传统线程对比

虚拟线程与传统线程对比 &#x1f504; &#x1f4cb; 核心问题 Project Loom的虚拟线程与传统线程在资源消耗上有何区别&#xff1f;如何设计一个支持百万级并发的服务&#xff1f; &#x1f4ca; 资源消耗比较 &#x1f418; 传统线程 &#x1f4cf; 每线程约1MB栈空间&am…

Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?

Java 单元测试框架比较&#xff1a;JUnit、TestNG 哪个更适合你&#xff1f; 在 Java 开发领域&#xff0c;单元测试是保证代码质量的重要环节。而选择一个合适的单元测试框架&#xff0c;对于提升测试效率和代码可靠性至关重要。本文将深入比较 JUnit 和 TestNG 这两个主流的…

从零开始的抽奖系统创作(2)

我们接着进行抽奖系统的完善。 前面我们完成了 1.结构初始化&#xff08;统一结果返回之类的&#xff0c;还有包的分类&#xff09; 2.加密&#xff08;基于Hutool进行的对称与非对称加密&#xff09; 3.用户注册 接下来我们先完善一下结构&#xff08;统一异常处理&#…

【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布

1. vs2022打开运行原sql Server的C#窗体项目更改为mysql数据库 1.1. vs2022安装基础模块即可 安装1️⃣vs核心编辑器2️⃣.net桌面开发必选&#xff0c;可选均不安装&#xff01;&#xff01;&#xff01; 为了成功连接mysql数据库&#xff0c;需要安装组件NuGet包管理器 安…

AI 编程 “幻觉” 风险频发?飞算 JavaAI 硬核技术筑牢安全防线

AI 技术已深度融入编程领域&#xff0c;为开发者带来前所未有的便利与效率提升。然而&#xff0c;AI 编程 “幻觉” 问题如影随形&#xff0c;频频引发困扰&#xff0c;成为阻碍行业稳健发展的潜在风险。飞算 JavaAI 凭借一系列硬核技术&#xff0c;强势出击&#xff0c;为攻克…

数据库----软考中级软件设计师(自用学习笔记)

目录 1、E-R图 2、结构数据模型 3、数据库的三级模式结构 4、关系代数 5、查询 6、SQL控制语句 7、视图​编辑 8、索引 9、关系模式 10、函数依赖 11、通过闭包求候选码 12、范式 13、无损连接和保持函数依赖 14、数据库设计 15、数据库的控制功能 16、数据库…

【Qt】Qt常见控件的相关知识点

1.close退出槽函数 2.设置快捷键&#xff0c;QMenu 。 适用&字母就能设置快捷键&#xff0c;运行qt程序&#xff0c;最后就可以按Alt对应的字母进行快捷操作。 3.QMenuBar内存泄露问题 如果ui已经自动生成了menubar&#xff0c;我们再次生成一个新的菜单栏&#xff0c;而…

httpx[http2] 和 httpx 的核心区别及使用场景如下

httpx[http2] 和 httpx 的核心区别在于 HTTP/2 协议支持&#xff0c;具体差异及使用场景如下&#xff1a; 1. 功能区别 命令/安装方式协议支持额外依赖适用场景pip install httpx仅 HTTP/1.1无通用请求&#xff0c;轻量依赖pip install httpx[http2]支持 HTTP/2需安装 h2>3…

Spring Boot 中 MyBatis 与 Spring Data JPA 的对比介绍

一、核心概念 MyBatis 定义&#xff1a;基于 SQL 的持久层框架&#xff0c;提供灵活的 SQL 映射和自定义查询能力。 特点&#xff1a; 开发者手动编写 SQL&#xff08;XML 或注解&#xff09;。 支持动态 SQL、复杂查询优化。 轻量级&#xff0c;对数据库控制力强。 Spri…

k8s1.27集群部署mysql8.0双主双从

环境介绍&#xff1a; #节点分配 159m--->两个master&#xff0c;生产环境建议&#xff0c;一个master一个节点。 160n-->slave-0 161n-->slaves-0 #存储卷 pv-->放在节点上&#xff0c;没用nfs/云存储。hostpath方式存储。pv的资源分配1G&#xff0c;较小&#…

vivado fpga程序固化

一般下载到fpga上的程序在掉电之后就会丢失&#xff0c;如果想要掉电之后程序不丢失&#xff0c;就需要将比特流文件固化到板载的flash上。 以下以我的7a100t开发板为例&#xff0c;介绍程序固化的流程 点击OK就可以下载了。