PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控

一、简介

在现代深度学习的研究和开发中,模型的可视化和监控是不可或缺的一部分。PyTorch,作为一个流行的深度学习框架,通过其丰富的生态系统提供了多种工具来满足这一需求。其中,torch.utils.tensorboard 是一个强大的接口,它使得 PyTorch 用户能够轻松地将训练过程中的各种数据记录到 TensorBoard 中,进而实现数据的可视化和分析。TensorBoard 本身是一个独立的工具,最初由 TensorFlow 开发,但 PyTorch 通过 torch.utils.tensorboard 模块实现了与 TensorBoard 的无缝集成。这使得 PyTorch 用户能够享受到 TensorBoard 提供的强大可视化功能,而无需切换到 TensorFlow 框架。本文将详细介绍 torch.utils.tensorboard 的使用,包括其背景、核心功能、安装与配置、以及详细的示例代码,旨在帮助读者全面掌握这一工具。

二、安装与配置

在开始使用 torch.utils.tensorboard 之前,需要确保已经安装了 TensorBoard。可以使用以下命令通过 pip 安装:

pip install tensorboard

此外,还需要安装 PyTorch。如果你还没有安装 PyTorch,可以根据官方网站的指南进行安装。
安装完成后,你可以通过以下命令启动 TensorBoard 服务器:

tensorboard --logdir=path_to_log_directory

其中 path_to_log_directory 是你希望 TensorBoard 读取日志文件的目录路径。在浏览器中访问 http://localhost:6006,即可查看 TensorBoard 的可视化界面。

三、核心功能

3.1 记录标量(Scalars)

标量是训练过程中最常见的监控指标,如损失(loss)、准确率(accuracy)等。使用 add_scalar 方法可以记录单个标量值,而 add_scalars 方法则可以同时记录多个标量值。

1. 编写测试代码

import torch
from torch.utils.tensorboard import SummaryWriter
# 初始化 SummaryWriter
writer = SummaryWriter('runs/scalar_example')for epoch in range(100):# 模拟训练过程中的损失值loss = torch.randn(1).item()# 记录损失值到 TensorBoardwriter.add_scalar('Loss/train', loss, epoch)
# 关闭 SummaryWriter
writer.close()

在上述代码中,我们创建了一个 SummaryWriter 实例,并指定了日志文件的存储目录为 runs/scalar_example。然后,我们在一个模拟的训练循环中,每个 epoch 记录一次损失值。最后,关闭 SummaryWriter 以释放资源。

2. 在conda环境中,启动tensorboard
我的工程目录在:
E:\深图智能工作室\CSDN\深度学习教程\pytorch使用教程\PyTorch使用教程(13)-PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控\project

#进入共目录
(yolov11) C:\Users\Administrator>E:
(yolov11) E:\>cd E:\深图智能工作室\CSDN\深度学习教程\pytorch使用教程\PyTorch使用教程(13)-PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控\project
#启动tensorboard
(yolov11) E:\深图智能工作室\CSDN\深度学习教程\pytorch使用教程\PyTorch使用教程(13)-PyTorch使用教程(13)-一文搞定模 型的可视化和训练过程监控\project>tensorboard --logdir=runs\scalar_example

3. 在浏览器中打开http://localhost:6006
在这里插入图片描述

4.点击scalar图标
在这里插入图片描述

3.2 记录直方图(Histograms)

直方图用于可视化模型参数的分布,如权重和偏置的直方图。这有助于理解模型在训练过程中的变化,以及检测潜在的异常值。

示例代码

import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter# 定义一个简单的神经网络
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(10, 1)def forward(self, x):return self.fc(x)# 初始化网络和 SummaryWriter
model = SimpleNet()
writer = SummaryWriter('runs/histogram_example')# 模拟一个训练步骤
for epoch in range(10):# 获取网络参数的梯度for name, param in model.named_parameters():writer.add_histogram(name, param.detach().cpu().numpy(), epoch)writer.add_histogram(f'{name}.grad', param.grad.detach().cpu().numpy(), epoch)# 关闭 SummaryWriter
writer.close()

在这个例子中,我们定义了一个简单的全连接网络,并在每个 epoch 记录网络参数的直方图以及梯度的直方图。按照上文的方式启动tensorboard,在浏览器中访问,即可查看。
在这里插入图片描述

3.3 记录图像(Images)

图像是另一种重要的可视化手段,特别是在处理图像数据或需要可视化特征图时。add_image 方法用于记录单个图像,而 add_images 方法则可以记录一个图像批次。

示例代码

import torch
import torchvision.utils as vutils
from torch.utils.tensorboard import SummaryWriter# 初始化 SummaryWriter
writer = SummaryWriter('runs/image_example')# 创建一个随机的图像批次
img_batch = torch.randn(16, 3, 64, 64)# 使用 torchvision.utils.make_grid 将图像批次转换为网格形式
img_grid = vutils.make_grid(img_batch, nrow=4, normalize=True, scale_each=True)# 记录图像到 TensorBoard
writer.add_image('ImageGrid', img_grid)# 关闭 SummaryWriter
writer.close()

在这个例子中,我们创建了一个随机的图像批次,并使用 make_grid 函数将其转换为网格形式,然后记录到 TensorBoard 中。
在这里插入图片描述

3.4 记录文本(Text)

有时候,我们可能需要在 TensorBoard 中记录一些文本信息,如模型配置、超参数或日志消息。add_text 方法正是为此设计的。

示例代码

from torch.utils.tensorboard import SummaryWriter# 初始化 SummaryWriter
writer = SummaryWriter('runs/text_example')# 记录文本信息到 TensorBoard
writer.add_text('Configuration', 'Learning Rate: 0.01, Batch Size: 32', 0)
writer.add_text('Log', 'Epoch 1: Loss=0.5, Accuracy=80%', 1)# 关闭 SummaryWriter
writer.close()

在这个例子中,我们使用 add_text 方法记录了一些简单的文本信息。
在这里插入图片描述

3.5 记录模型图结构(Graph)

了解模型的计算图结构对于调试和优化模型至关重要。add_graph 方法允许我们记录模型的前向传播图。

示例代码

import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter# 定义一个简单的神经网络
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(10, 5)self.relu = nn.ReLU()self.fc2 = nn.Linear(5, 2)def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return x# 初始化模型和 SummaryWriter
model = SimpleNet()
writer = SummaryWriter('runs/graph_example')# 创建一个随机输入张量
input_tensor = torch.randn(1, 10)# 记录模型图结构到 TensorBoard
writer.add_graph(model, input_tensor)# 关闭 SummaryWriter
writer.close()

在这个例子中,我们定义了一个包含两个全连接层和一个 ReLU 激活函数的简单网络,并使用 add_graph 方法记录了其计算图结构。
在这里插入图片描述

4、注意事项

  • 安装和配置:你需要确保已经安装了 torch 和 tensorboard。虽然 torch.utils.tensorboard 是 PyTorch 的一部分,但 tensorboard 需要单独安装,用于可视化数据。

  • 初始化 SummaryWriter:在开始记录数据之前,你需要初始化一个 SummaryWriter 对象,指定一个日志目录(log_dir)。这个目录将用于存储所有记录的数据。

  • 记录数据的位置:应该在训练循环中适当的位置记录数据。例如,在每次迭代或每个 epoch 结束时记录损失值、梯度等。

  • 关闭 SummaryWriter:在训练结束后,确保调用 SummaryWriter 的 close() 方法来关闭它,并确保所有数据都已写入日志文件。

  • 日志目录的唯一性:为了避免新日志覆盖旧的日志文件,确保每次运行训练时日志目录是唯一的。可以使用时间戳或其他唯一标识符来命名日志目录。

5、小结

torch.utils.tensorboard 是一个功能强大的工具,它能够帮助开发者在训练深度学习模型时高效地记录和可视化各种关键数据。然而,要想熟练掌握这个工具,并不是一蹴而就的。这需要开发者在实际项目中多使用 torch.utils.tensorboard,通过不断的实践来熟悉它的各种功能和用法。同时,多阅读相关的官方文档也是非常重要的。官方文档通常提供了详尽的功能介绍、使用指南以及常见问题解答,能够帮助开发者更好地理解和运用 torch.utils.tensorboard。此外,研究和分析示例源码也是提升熟练度的有效途径。通过查看和模仿优秀的示例源码,开发者可以学习到如何将 torch.utils.tensorboard 应用于实际项目中,并借鉴其中的最佳实践和技巧。因此,要想熟练掌握 torch.utils.tensorboard,开发者应该注重实践、阅读和源码分析,不断提升自己的技能水平。

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

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

相关文章

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。   重新编写login函数,之前测试Cookie和Session认证时用的函数适合m…

【Linux系统】—— 编译器 gcc/g++ 的使用

【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理(进行宏替换)2.2 编译(生成汇编)2.3 汇编(生成机器可识别代码)2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…

[已解决]chatgpt被降智了怎么办?(无法联网、识别图片、文件、画图)

文章目录 1、治标办法一发图2、治本方法—使用ChatGPT中国区代理官方站点 1、治标办法一发图 该方法原本就有,但是在1.1日ChatGPT降智事件中突然失效。于1月11日,该方法又突然有效,因此也标志着本次ChatGPT降智事件的结束。当你ChatGPT出现降…

缓存、数据库双写一致性解决方案

双写一致性问题的核心是确保数据库和缓存之间的数据同步,以避免缓存与数据库数据不同步的问题,尤其是在高并发和异步环境下。本文将探讨双写一致性面临的主要问题和解决方案,重点关注最终一致性。 本文讨论的是最终一致性问题 双写一致性面…

element el-table合并单元格

合并 表格el-table添加方法:span-method"” <el-table v-loading"listLoading" :data"SHlist" ref"tableList" element-loading-text"Loading" border fit highlight-current-row :header-cell-style"headClass" …

qml OpacityMask详解

1、概述 OpacityMask是QML&#xff08;Qt Meta-Object Language&#xff09;中的一种图形效果&#xff0c;它使用另一个项目&#xff08;通常是一个图像或图形项&#xff09;作为遮罩来控制源项目的透明度。这种效果允许开发者通过遮罩的alpha通道来精确地控制源项目中哪些部分…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录 SSRF说明: SSRF攻击流程 原理&#xff1a; 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…

centos9编译安装opensips 二【进阶篇-定制目录+模块】推荐

环境&#xff1a;centos9 last opensips -V version: opensips 3.6.0-dev (x86_64/linux) flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, HP_MALLOC, DBG_MALLOC, CC_O0, FAST_LOCK-ADAPTIVE_WAIT ADAPTIVE_WAIT_LOOPS1024, MAX_RE…

【前端】CSS学习笔记(1)

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

电阻电位器可调电阻信号隔离变送器典型应用

电阻电位器可调电阻信号隔离变送器典型应用 产品描述&#xff1a; 深圳鑫永硕科技的XYS-5587系列是一进一出线性电子尺(电阻/电位计信号及位移)信号隔离变送器&#xff0c;是将输入电阻,线性电子尺,角度位移传感器信号进行采集,隔离,放大并转换成模拟量信号的小型仪表设备,并以…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…

文件系统格式RAW数据恢复全攻略

一、RAW文件系统格式深度解析 在数据存储的世界里&#xff0c;文件系统扮演着至关重要的角色&#xff0c;它负责管理和组织硬盘、U盘、SD卡等存储设备上的数据。而RAW文件系统格式&#xff0c;作为一种特殊状态&#xff0c;常常让许多用户感到困惑与不安。RAW格式并非一种标准…

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介&#x1f31f; 主要特点&#x1f4e5; 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 &#x1f680; 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 &#x1f3a8; 使用体验常见问题&#x1f4dd; 小结 简介 Stable-Diffusion-We…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Yearning开源MySQL SQL审核平台

一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用. 本地部署&#xff0c;注重隐私&#xff0c;简单高效的MYSQL审计平台。 它可以通过流程审批&#xff0c;实现真实线上环境sql的审核和执行&#xff0c;还可以回滚执行&#xff0c;能够确保线上SQL更新的可靠性…

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具&#xff0c;其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程&#xff0c;让模型架构一目了然。通过torchinfo的summary函数&#xff0c;用户可以快速获取模型的详细结构和统计信息&#xff0…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

C++ 类- 构造和析构

空类 class A {};空类大小&#xff1a; sizeof(A) 1编译器会默认生成 6 个成员函数&#xff1a; class A { public:A();//构造函数 - 完成对象初始化工作~A();//析构函数 - 完成对象的资源清理A(const A& a);//拷贝构造函数 - 使用同一类中之前创建的对象来初始化新创建…