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.rhkb.cn/news/5093.html

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

相关文章

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合,我们的暴力解法就是挨个进行遍历操作,一直找到和我们的这…

Qt按钮美化教程

前言 Qt按钮美化主要有三种方式:QSS、属性和自绘 QSS 字体大小 font-size: 18px;文字颜色 color: white;背景颜色 background-color: rgb(10,88,163); 按钮边框 border: 2px solid rgb(114,188,51);文字对齐 text-align: left;左侧内边距 padding-left: 10…

ESP32下FreeRTOS实时操作系统使用

ESP32下FreeRTOS实时操作系统使用 文章目录 ESP32下FreeRTOS实时操作系统使用一、概述二、为什么要使用实时操作系统RTOS?三、FreeRTOS任务3.1 什么是 FreeRTOS 任务?3.2 FreeRTOS 任务的特点3.3 FreeRTOS 任务的生命周期3.4 FreeRTOS 任务的状态3.5 Fre…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具,用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小,以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍,包括它的安装、使用以…

BEVFusion论文阅读

1. 简介 融合激光雷达和相机的信息已经变成了3D目标检测的一个标准,当前的方法依赖于激光雷达传感器的点云作为查询,以利用图像空间的特征。然而,人们发现,这种基本假设使得当前的融合框架无法在发生 LiDAR 故障时做出任何预测&a…

二十七、资源限制-LimitRange

LimitRange生产必备 在调度的时候 requests 比较重要,在运行时 limits 比较重要。 一、产生原因 生产中只有ResourceQuota是不够的 只配置ResourceQuotas的情况下,pod的yaml文件没有配置resources配置,都是0的话,就可以无限配置,永远达不到limit LimitRange做了什么 如…

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统(IDS)是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备,它…

鸿蒙Harmony json转对象(1)

案例1 运行代码如下 上图的运行结果如下: 附加1 Json_msg interface 案例2 import {JSON } from kit.ArkTS; export interface commonRes {status: numberreturnJSON: ESObject;time: string } export interface returnRes {uid: stringuserType: number; }Entry Component …

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告:高光谱成像技术检测食物新鲜度 检测原理:不同新鲜程度的食品,其化学成分和结构会有所不同,在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

BottomNavigationBar组件的用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了TextField Widget,本章回中将介绍BottomNavigationBar Widget。闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中将介绍一个新的Widget:BottomNavigationBar,它就是我们…

总结5..

#include<stdio.h> struct nb {//结构体列队 int x, y;//x为横坐标&#xff0c;y为纵坐标 int s, f;//s为步数&#xff0c;//f为方向 }link[850100]; int n, m, x, y, p, q, f; int hard 1, tail 1; int a[52][52], b[52][52], book[52][52][91]; int main() { …

媒体新闻发稿价格怎么算?移动端发稿价格低的原因有哪些?

对于有过一定发稿经历的朋友&#xff0c;面对不同媒体新闻渠道的发稿价格肯定有所疑惑。尤其同一家媒体&#xff0c;移动端经常比网页端投放渠道的价格要低。到底有哪些方面的原因&#xff0c;导致了这一情况&#xff1f;就让小编来分享下自己的发稿经验。 一、内容展示效果 考…

【Linux系统编程】—— 从零开始实现一个简单的自定义Shell

文章目录 什么是自主shell命令行解释器&#xff1f;实现shell的基础认识全局变量的配置初始化环境变量实现内置命令&#xff08;如 cd 和 echo&#xff09;cd命令&#xff1a;echo命令&#xff1a; 构建命令行提示符获取并解析用户输入的命令执行内置命令与外部命令Shell的主循…

html,css,js的粒子效果

这段代码实现了一个基于HTML5 Canvas的高级粒子效果&#xff0c;用户可以通过鼠标与粒子进行交互。下面是对代码的详细解析&#xff1a; HTML部分 使用<!DOCTYPE html>声明文档类型。<html>标签内包含了整个网页的内容。<head>部分定义了网页的标题&#x…

.Net Core微服务入门系列(一)——项目搭建

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法&#xff1a;直接法&#xff0c;或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中&#xff0c;String 类的字符串实际存储在 char 数组中&#xff1a; String 类也重写了 toString 方法&#xff0c;所以可以直…

Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)

经过上一章内容的学习&#xff0c;了解了 Linux 下空洞文件的概念&#xff1b;open 函数的 O_APPEND 和 O_TRUNC 标志&#xff1b;多次打开同一文件&#xff1b;复制文件描述符&#xff1b;等内容 本章将会接着探究文件IO&#xff0c;讨论如下主题内容。  文件共享介绍&…

npm run dev 时直接打开Chrome浏览器

package.json 修改下配置 "scripts": {"dev": "vite --open chrome.exe",......}, "dev": "vite" 修改为 "dev": "vite --open chrome.exe" 这样方便一点&#xff0c;省得每次去点调试窗口的链接

微软预测 AI 2025,AI Agents 重塑工作形式

1月初&#xff0c;微软在官网发布了2025年6大AI预测&#xff0c;分别是&#xff1a;AI模型将变得更加强大和有用、AI Agents将彻底改变工作方式、AI伴侣将支持日常生活、AI资源的利用将更高效、测试与定制是开发AI的关键以及AI将加速科学研究突破。 值得一提的是&#xff0c;微…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和

本博客将详细探讨如何通过二分查找算法来解决这几个经典问题。通过几个实际的例子&#xff0c;我们将展示如何在这些问题中灵活应用二分查找&#xff0c;优化计算过程&#xff0c;并在面对大数据量时保持高效性。 目录 前言 数的三次方根 算法思路 代码如下 机器人跳跃问题…