小土堆pytorch--tensorboard的使用

小土堆pytorch--tensorboard的使用

  • 小土堆pytorch--tensorboard的使用
    • 0.介绍
    • 1.使用tensorboard绘制 y = x 等简单函数
      • 1.1 相应的代码
      • 1.2 对上述代码的解释
      • 1.3 可能遇到的问题
        • 1.3.1 问题
        • 1.3.2 解决方法
    • 2.使用tensorboard加载数据集中的图片
      • 2.1 相应代码
      • 2.2 对上述代码的解释
        • 2.2.1 代码功能概述
        • 2.2.2代码逐行解释
      • 2.3 后续操作

小土堆pytorch–tensorboard的使用

0.介绍

TensorBoard 是 TensorFlow 提供的一组可视化工具 ,能将机器学习实验数据图形化展示,助力理解、调试、优化模型,也可用于 PyTorch 等框架结合使用来可视化相关数据。

主要功能

  • 可视化模型结构:呈现模型计算图,展示张量、变量和操作流程,助于理解模型架构和参数。
  • 跟踪训练指标:实时呈现损失函数、准确率、梯度等训练指标变化,以折线图等形式展示,方便评估模型性能和优化训练过程。
  • 可视化数据分布:通过直方图展示张量分布,了解权重、激活值等分布及变化;用平面展示数据分布情况,分析数据特征。
  • 展示图像音频:展示训练过程中的图像(如输入图像、输出图像、中间层特征图 )和音频数据,辅助理解模型对多媒体数据的处理。
  • 高维数据降维可视化:利用技术将高维嵌入向量投影到低维空间展示,分析向量关系和分布。

1.使用tensorboard绘制 y = x 等简单函数

1.1 相应的代码

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")# writer.add_image()
# y = x
for i in range(0, 100):writer.add_scalar("y=x", i, i)writer.close()

运行这段代码后,会在当前目录下生成一个名为 logs 的文件夹,其中包含了记录 y = x 数据的日志文件。接下来,可以在命令行中使用以下命令启动 TensorBoard 服务:

tensorboard --logdir=logs

然后在浏览器中打开 http://localhost:6006,就可以看到 y = x 函数关系的可视化图表。
在这里插入图片描述
然后就可以看到图表
在这里插入图片描述

1.2 对上述代码的解释

  1. 导入模块

    from torch.utils.tensorboard import SummaryWriter
    

    这行代码从 torch.utils.tensorboard 模块中导入 SummaryWriter 类。SummaryWriter 是一个重要的类,它可以将各种数据(如标量、图像、直方图等)写入日志文件,以便后续使用 TensorBoard 进行可视化分析。

  2. 创建 SummaryWriter 实例

    writer = SummaryWriter("logs")
    

    这行代码创建了一个 SummaryWriter 类的实例 writer,并指定日志文件的保存目录为 “logs”。也就是说,后续通过 writer 记录的数据都会被保存到这个名为 logs 的文件夹中。如果该文件夹不存在,程序会自动创建它。
    在这里插入图片描述
    运行这段代码后,IDE会自动生成logs文件夹

  3. 循环记录标量数据

    # y = x
    for i in range(0, 100):writer.add_scalar("y=x", i, i)
    

    for i in range(0, 100)::这是一个 for 循环,循环变量 i 从 0 到 99 依次取值。
    writer.add_scalar(“y=x”, i, i):调用 writer 的 add_scalar 方法,该方法有三个主要参数:
    A 第一个参数 “y=x” 是一个字符串,作为数据的标签,用于在 TensorBoard 中标识这组数据。
    B 第二个参数 i 是要记录的标量值,也就是 y 的值,因为这里 y = x,所以 y 的值就等于 i。
    C 第三个参数 i 是全局步数(global_step),用于表示数据点的顺序,在 TensorBoard 中,global_step 通常对应 x 轴,用于展示数据随时间或迭代次数的变化。

    TIPS:
    在这里插入图片描述
    我们用CTRL+鼠标左键点击add_scalar会跳出该函数的定义,以及对参数的讲解
    在这里插入图片描述

  4. 关闭 SummaryWriter

    writer.close()
    

    这行代码调用 writer 的 close 方法,关闭 SummaryWriter 实例。关闭操作会确保所有的数据都被正确写入到日志文件中,释放相关资源。

综上所述,这段代码的主要目的是使用 SummaryWriter 记录 y = x 函数关系的数据,并将其保存到日志文件中,以便后续使用 TensorBoard 进行可视化分析。

1.3 可能遇到的问题

1.3.1 问题

在这里插入图片描述
这是这段代码的运行结果
在这里插入图片描述
也会对应在logs目录下生成相应的文件
在这里插入图片描述
在这里插入图片描述
假如我们修改代码,其实就这一点变化,我们在tensorboard上查看结果的时候会发现问题
在这里插入图片描述
在这里插入图片描述

**导致错误的原因:**多次记录了相同标签(都标为 y = 5x )的数据,且每次记录的数据范围、采样方式等有差异,导致多组数据在同一图表中叠加显示,出现多条看似混乱的线。

1.3.2 解决方法

在这里插入图片描述
首先我们在pycharm中按ctrl+c杀掉当前进程
在这里插入图片描述
然后我们手动删除这两个文件
然后再次运行上述代码,问题就可以解决了
在这里插入图片描述

2.使用tensorboard加载数据集中的图片

2.1 相应代码

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(img_array.shape)writer.add_image("test", img_array, 1, dataformats = 'HWC')writer.close()

2.2 对上述代码的解释

2.2.1 代码功能概述

这段代码的主要功能是使用PyTorch 中的 torch.utils.tensorboard 模块,将一张本地的图像文件添加到 TensorBoard 的日志中,以便后续使用 TensorBoard 工具对该图像进行可视化展示。

2.2.2代码逐行解释
  1. 导入必要的模块
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
  • from torch.utils.tensorboard import SummaryWriter:从 torch.utils.tensorboard 模块中导入 SummaryWriter 类。SummaryWriter 用于将各种数据(如标量、图像、直方图等)写入日志文件,方便后续使用 TensorBoard 进行可视化分析。
  • import numpy as np:导入 numpy 库,并将其重命名为 npnumpy 是一个用于科学计算的强大库,在处理数组和矩阵时非常有用。
  • from PIL import Image:从 PIL(Python Imaging Library)库中导入 Image 类。PIL 是 Python 中常用的图像处理库,Image 类可以用于打开、操作和保存多种图像文件格式。
  1. 创建 SummaryWriter 实例
writer = SummaryWriter("logs")

创建一个 SummaryWriter 类的实例 writer,并指定日志文件的保存目录为 "logs"。如果该目录不存在,程序会自动创建它。后续通过 writer 记录的数据都会被保存到这个目录下的日志文件中。

3 打开图像文件

image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
img_PIL = Image.open(image_path)
  • image_path = "dataset/train/ants/5650366_e22b7e1065.jpg":定义一个字符串变量 image_path,用于指定要打开的图像文件的路径。
  • img_PIL = Image.open(image_path):使用 Image.open() 方法打开指定路径的图像文件,并将其存储为 PIL 图像对象 img_PIL

4 将 PIL 图像对象转换为 numpy 数组

img_array = np.array(img_PIL)

使用 np.array() 函数将 PIL 图像对象 img_PIL 转换为 numpy 数组 img_arraynumpy 数组更适合进行数值计算和处理,方便后续传递给 SummaryWriter 进行记录。

5 打印图像数组的形状

print(img_array.shape)

打印 img_array 的形状,即图像的高度、宽度和通道数。例如,对于 RGB 图像,形状通常为 (height, width, 3)

6 向 TensorBoard 日志中添加图像

writer.add_image("test", img_array, 1, dataformats = 'HWC')

调用 writeradd_image 方法,将图像添加到 TensorBoard 日志中。该方法有几个参数:

  • 第一个参数 "test" 是一个字符串,作为图像的标签,用于在 TensorBoard 中标识这张图像。
  • 第二个参数 img_array 是要添加的图像数据,即前面转换得到的 numpy 数组。
  • 第三个参数 1 是全局步数(global_step),用于表示图像的顺序或迭代次数,在 TensorBoard 中,global_step 通常对应 x 轴,用于展示数据随时间或迭代次数的变化。
  • dataformats = 'HWC':指定图像数据的格式。'HWC' 表示图像数据的维度顺序为高度(Height)、宽度(Width)和通道数(Channels)。
    在这里插入图片描述
    在这里插入图片描述

注意:在add_image的定义中如果tensor的形状是(H,W,3)则需要使用 dataformats = ‘HWC’
7. 关闭 SummaryWriter

writer.close()

调用 writerclose 方法,关闭 SummaryWriter 实例。关闭操作会确保所有的数据都被正确写入到日志文件中,并释放相关资源。

2.3 后续操作

运行这段代码后,会在当前目录下生成一个名为 logs 的文件夹,其中包含了记录图像数据的日志文件。接下来,可以在命令行中使用以下命令启动 TensorBoard 服务:

tensorboard --logdir=logs

然后在浏览器中打开 http://localhost:6006,就可以在 TensorBoard 的界面中看到名为 "test" 的图像。

综上所述,这段代码的主要目的是使用 SummaryWriter 将本地的一张图像添加到 TensorBoard 日志中,以便后续进行可视化分析。

这样我们就可以在tensorboard中看到相应的图像
在这里插入图片描述
然后我们可以变换图像(使用图片的相对路径),然后把参数step=2
在这里插入图片描述

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

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

相关文章

大模型(LLMs)RAG 版面分析——文本分块面

大模型(LLMs)RAG 版面分析——文本分块面 一、为什么需要对文本分块? 二、能不能介绍一下常见的文本分块方法? 2.1 一般的文本分块方法 2.2 正则拆分的文本分块方法 2.3 Spacy Text Splitter 方法 2.4 基于 langchain 的 Cha…

解构区块链身份认证:从ID到零知识证明的实战指南

引言 在数字经济高速发展的今天,数字身份已成为个人与数字世界交互的核心凭证。传统中心化身份系统存在数据孤岛、隐私泄露、单点故障等痛点,而区块链技术凭借​​去中心化、不可篡改、可追溯​​的特性,为数字身份验证提供了革命性解决方案…

c#数据结构 线性表篇 非常用线性集合总结

本人能力有限,使用了一些Ai的结论,如有不足还请斧正 目录 1.HashSet <> Dictionary 2.SortedSet <>提供升序方法的List 3.ArrayList<>List 4.BitArray <> Bit[] array 5.StringCollection <>List 6.StringDictionary<>Dictionary 1…

爬虫管理平台-最新版本发布

TaskPyro 是什么&#xff1f; TaskPyro 是一个轻量级的 Python 任务调度平台&#xff0c;专注于提供简单易用的任务管理和爬虫调度解决方案。它能够帮助您轻松管理和调度 Python 任务&#xff0c;特别适合需要定时执行的爬虫任务和数据处理任务。 官方文档&#xff1a;https:/…

过采样处理

一、数据读取与初步观察 首先&#xff0c;使用pandas库读取信用卡交易数据集&#xff1a; data pd.read_csv(r"./creditcard.csv") print(data.head())通过head()方法查看数据集的前几行&#xff0c;初步了解数据的结构和内容。该数据集包含交易时间、交易金额、多…

潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码

一、源码描述 这是一套潮乎盲盒商城源码&#xff0c;仿小叮当盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端数据库分离&#xff0c;支持四端同步数据&#xff08;H5小程序等&#xff09;&#xff0c;测试环境: php7.4&#xff0c;mysql5.6&#xff0c;…

c++环境和vscode常用的一些有用插件

环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…

Spring 转发 form-data 文件上传请求时中文文件名乱码

Spring 转发 form-data 文件上传请求时中文文件名乱码 复现问题找原因解决问题参考 复现问题 后端有两个接口&#xff1a; /upload 是文件上传的接口。 /forward 是转发文件上传请求的接口。 RequestMapping RestController public class FileUploadController {/*** 直接调…

MySQL 8.4.4 安全升级指南:从漏洞修复到版本升级全流程解析

目录 二、升级前关键注意事项 1. 数据安全与备份 2. 版本兼容性与路径规划 三、分步升级操作流程 1. 环境预检与准备 2. 安装包部署 3. 强制升级组件 4. 验证与启动 一、背景与必要性 近期安全扫描发现生产环境的 MySQL 数据库存在多个高危漏洞(CVE 详情参见Oracle 官…

vulkanscenegraph显示倾斜模型(6.4)-多线程下的记录与提交

前言 上章深入分析了帧循环中呈现阶段的具体实现。本章将分析多线程下的记录与提交&#xff0c;进一步剖析vsg帧循环过程中的同步机制&#xff0c;并揭露信号量(VkSemaphore)和围栏(VkFence)以及vsg::FrameBlock与vsg::Barrier在其中的作用。 目录 1 信号量(VkSemaphore)、栅栏…

Python爬虫实战:获取扇贝单词数据并分析,为用户高效学习单词做参考

一、引言 随着互联网的迅猛发展,在线学习资源日益丰富多样。扇贝单词作为一款备受欢迎的在线英语学习平台,积累了海量的单词学习数据。借助 Python 强大的爬虫技术获取这些数据,并运用数据分析和机器学习方法进行深度挖掘,能够为用户量身定制更个性化、更高效的单词学习方…

【Vagrant+VirtualBox创建自动化虚拟环境】Ansible-Playbook

Vagrant 后续Ansible实战&#xff1a;【Ansible自动化运维实战&#xff1a;从Playbook到负载均衡指南】-CSDN博客 Vagrant是一个基于Ruby的工具&#xff0c;用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统&#xff0c;使用 Chef创建自动化虚拟环境 Do…

Codigger Desktop:重新定义数字工作与生活方式

Codigger Desktop是一款革命性的智能桌面操作系统&#xff0c;专为现代数字生活和工作场景打造。它不仅成为开发者的强大生产力工具&#xff0c;更是普通用户日常数字生活的得力助手&#xff0c;完美实现了专业性与易用性的平衡。 Multimedia Desktop全能数字生活平台 重新定…

Servlet+tomcat

serverlet 定义&#xff1a;是一个接口&#xff0c;定义了java类被浏览器&#xff08;tomcat识别&#xff09;的规则 所以我们需要自定义一个类&#xff0c;实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径&#xff0c;会…

什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐

一、DDoS 攻击&#xff1a;互联网时代的 “数字核武器” 1. DDoS 攻击的本质与原理 ** 分布式拒绝服务攻击&#xff08;DDoS&#xff09;** 通过操控海量僵尸设备&#xff0c;向目标服务器发送洪水般请求&#xff0c;耗尽带宽、连接或计算资源&#xff0c;导致合法用户无法访…

Circular Plot系列(一): 环形热图绘制

针对近期多个粉丝咨询环形图的绘制&#xff0c;我意识到&#xff0c;我们似乎没有真正介绍过circle图&#xff0c;但这一类图确是非常常用的图&#xff0c;所以这里详细学习一下circle的绘制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安装包, #https:/…

【数据挖掘】时间序列预测-时间序列预测策略

时间序列预测策略 &#xff08;1&#xff09;单步预测与多步预测&#xff08;2&#xff09;直接多步预测&#xff08;3&#xff09;递归多步预测&#xff08;4&#xff09;直接递归的混合预测&#xff08;5&#xff09;多输入多输出预测 &#xff08;1&#xff09;单步预测与多…

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…

【数据结构】--- 单链表的增删查改

前言&#xff1a; 经过了几个月的漫长岁月&#xff0c;回头时年迈的小编发现&#xff0c;数据结构的内容还没有写博客&#xff0c;于是小编赶紧停下手头的活动&#xff0c;补上博客以洗清身上的罪孽 目录 前言 概念&#xff1a; 单链表的结构 我们设定一个哨兵位头节点给链…

【JAVA】数据类型与变量:深入理解栈内存分配(4)

核心知识点详细解释 Java 的基本数据类型和引用数据类型 基本数据类型 Java 有 8 种基本数据类型&#xff0c;它们可以分为 4 类&#xff1a; 整数类型&#xff1a;byte&#xff08;1 字节&#xff09;、short&#xff08;2 字节&#xff09;、int&#xff08;4 字节&#…