神经网络入门实战:(六)PyTorch 中的实用工具 SummaryWriter 和 TensorBoard 的说明

news2024/11/30 11:21:54

(一) SummaryWriter

这里先讲解 SummaryWriter ,TensorBoard 会在第二大点进行说明。

SummaryWriter 是 PyTorch 中的一个非常实用的工具,它主要用于将深度学习模型训练过程中的各种日志和统计数据记录下来,并可以与 TensorBoard 配合使用,实现数据的可视化。以下是对 SummaryWriter 库的详细介绍:

1)概述

SummaryWriter 是 torch.utils.tensorboard 包中的一个类,它允许用户将训练过程中的关键信息(如损失值、准确率、学习率、模型权重分布、图像等)写入到指定的事件文件中。这些信息随后可以被 TensorBoard 解析和展示,从而帮助开发者更好地理解和监控模型的训练过程。

2)代码使用步骤

  1. 安装 TensorBoard:在使用 SummaryWriter 之前,需要确保已经安装了 TensorBoard 。可以使用 pip 命令进行安装:pip install tensorboard
  2. 导入 SummaryWriter:在代码中导入 SummaryWriter 类:from torch.utils.tensorboard import SummaryWriter
  3. 实例化 SummaryWriter:创建一个 SummaryWriter 对象,并指定一个日志目录(log_dir),用于保存事件文件。
    • 例如:writer = SummaryWriter('runs/my_experiment') ,或者 writer = SummaryWriter('logs')
    • 如果没有指定日志目录,那么当开始记录数据时,会自动在当前代码的目录下创建一个名为 runs 的文件夹,同时在此文件夹下创建一个以当前时间、日期和主机名命名的子目录,用于保存时间文件,类似于 ./runs/YYYYMMDD_HHMMSS_hostname/ 这样的路径。
  4. 记录数据(第三小点会详细介绍):在训练过程中,使用 SummaryWriter 对象的各种方法记录需要的数据。例如,使用 add_scalar 记录损失值,使用 add_histogram 记录权重分布等。
  5. 关闭 SummaryWriter:在训练结束后,调用 writer.close() 方法关闭 SummaryWriter 对象,确保所有数据都被正确写入事件文件。
  6. 启动 TensorBoard(见下方第二大点):在命令行中使用 tensorboard --logdir=事件文件所在的文件夹名 命令启动 TensorBoard服务。然后,在浏览器中访问 http://localhost:6006,就可以看到 TensorBoard 的可视化界面了。

3)记录不同数据的代码

  1. 记录标量信息:使用 add_scalar 方法,可以记录如 损失值、准确率 等标量信息。这些信息通常以曲线图的形式在 TensorBoard 中展示,便于观察其变化趋势。

    writer = SummaryWriter('logs')
    writer.add_scalar('曲线图标题',scalar_value,global_step)
    # scalar_value 表示曲线图纵坐标数值
    # global_step 表示曲线图横坐标数值
    
  2. 记录张量信息:通过 add_histogram 等方法,可以记录 模型权重、梯度 等张量信息。TensorBoard 会以直方图的形式展示这些张量的分布,有助于分析模型的稳定性和收敛性。

  3. 记录图像信息(注意图像格式):使用 add_image 方法记录 图像 数据。这对于处理图像任务的模型来说尤其有用,因为可以直观地看到模型对输入图像的预测结果或中间层的特征图。

    writer = SummaryWriter('logs')
    writer.add_image("图片标题",image_tensor,global_step,dataformats='HWC')
    # image_tensor 表示图片的数据格式,只能是 torch.tensor 或者 numpy.ndarray 或者 string 格式
    # global_step 表示步长,从0开始!!
    # dataformats 表示图片的具体格式是CHW(通道数,高,宽)还是HWC(高,宽,通道数)还是HW。默认是CHW
    
    • torch.tensor 格式的图片,可以由 transforms 工具转成,具体会在后续 transforms 模块中进行讲解。

      在将图片转换成 tensor 格式时,代码会自动将像素值从(0,255)放缩到(0,1)之间

    • numpy.ndarray 格式的图片,有两种生成方式:

      • 通过 opencv 库中的工具直接读取:

        # 导入cv2库 
        img_path = "dataset/train/bees/bees(3).jpg"
        img_cv = cv2.imread(img_path)
        
      • 通过 numpy 库,间接生成:

        # 导入PIL.Image库,和numpy库
        img_path = "dataset/train/bees/bees(3).jpg"
        img_PIL = Image.open(image_path)
        img_array = np.array(img_PIL)
        

      nimpy.ndarray 格式的图片,是由 RGB 三个通道的值组成的,每个元素的值,都在(0,255)之间。

  4. 记录模型结构:在训练开始前,可以使用add_graph方法记录模型的结构。这有助于开发者理解模型的复杂性,并在TensorBoard 中直观地查看模型的层次结构和参数。

4)注意事项

  1. 日志目录的选择:为了避免日志文件的混乱,建议为每个实验或模型训练任务指定一个唯一的日志目录。
  2. 数据的实时性:SummaryWriter 是异步更新文件内容的,这意味着在训练过程中记录的数据可能不会立即显示在TensorBoard 中。但是,这并不会影响数据的准确性和完整性。
  3. 资源的占用:长时间运行 TensorBoard 可能会占用较多的系统资源。因此,建议在需要时才启动 TensorBoard 服务,并在完成后及时关闭。

5)示例

代码中的 SummaryWriter 中的字母 SW 一定要大写。

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('logs')

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

writer.close()

(二) TensorBoard

要确保安装的 TensorBoard 版本与 PyTorch 兼容,一般使用指令 pip install tensorboard==2.12.0 来安装(此时的 torch 版本为 2.4.1),原先安装好了也可以通过此指令进行覆盖。

1)使用方法

查看记录好的数据日志文件,将其可视化

运行下面这两个命令时,TensorBoard 会启动一个本地服务器,并在 默认网页浏览器中 打开一个新的标签页或窗口,显示 TensorBoard 的用户界面。在这个界面中,可以看到各种图表和可视化工具,它们展示了训练过程中记录的各种指标,如损失、准确率、模型参数分布等。

  • 默认端口号:

    tensorboard --logdir=日志目录路径
    # 例如:tensorboard --logdir=logs,logs就在当前代码文件夹中,是相对路径
    

    日志目录路径:

    • 如果 日志目录路径 是一个相对路径(即不以斜杠 / 开头),那么它会被解释为相对于你当前工作目录的路径。
    • 如果 日志目录路径 是一个绝对路径(即以斜杠 / 开头,或者在 Windows 上以盘符开头后跟冒号和斜杠,如 C:/logs),那么它会被直接解释为那个位置的路径。
  • 指定端口号:

    tensorboard --logdir=日志目录路径 --port=指定端口号
    # 例如:tensorboard --logdir=logs --port=6007,logs就在当前代码文件夹中,是相对路径
    

2)问题及解决办法

  • 已经画了一个图像,第二次画图时,如果图像内容变了,但是图像标题没变的话,两个图像就会重合紊乱,

    建议换标题,或者删除所有的日志文件,重新运行

  • 其他的问题,诸如显示不全、显示不出等,都可以通过删除所有的日志文件,换个端口重新运行来解决。

3)演示(结合 SummaryWriter )

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
import cv2

writer = SummaryWriter('logs')

image_path = "E:\\4_Data_sets\\1\\train\\ants_image\\ants(2).jpg"
img_cv = cv2.imread(image_path)
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)

print("img_cv :",type(img_cv))
print("img_PIL :",type(img_PIL))
print("img_array :",type(img_array))
print(img_array.shape)

writer.add_image("test",img_array,2,dataformats='HWC')
# y=x
for i in range(100):
	writer.add_scalar('y=x', i, i,)

writer.close()
-----------------------------------------------------------------------------------------------------------------
# 运行结果:
img_cv : <class 'numpy.ndarray'>
img_PIL : <class 'PIL.JpegImagePlugin.JpegImageFile'>
img_array : <class 'numpy.ndarray'>
(375, 500, 3)

在终端执行 tensorboard --logdir=logs --port=6007 并打开相应网址之后的运行结果:
在这里插入图片描述

上一篇下一篇
神经网络入门实战(五)待发布

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

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

相关文章

git的使用(简洁版)

什么是 Git&#xff1f; Git 是一个分布式版本控制系统 (DVCS)&#xff0c;用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建&#xff0c;最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具&#xff0c;使得开发者…

联想M7400Pro打印机报无法打印02 关闭电源,然后重新打开。故障检修分析

联想M7400Pro打印机无法打印02可能是由于硬件故障、软件问题、通信故障等引起的。 以下是故障的解决方法: 1、关闭打印机(可尝试多次重新启动打印机)。 2、重新放置碳粉盒组件。 3、检查打印机驱动程序是否已正确安装。 4、检查打印机的设置,确保已选择正确的打印模式…

排序(数据结构)

排序&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 常见排序法 . 常见排序算法的实现 插入排序 1.直接插入排序 2.希尔排序( 缩小增量排序&#xff09; 希尔排序的特性总结&#x…

【深度学习】铝箔表面缺陷检测【附链接】

一、铝箔表面缺陷种类 铝箔广泛应用于食品包装、药品包装和工业用途等领域&#xff0c;表面质量直接影响产品的性能和安全性。铝箔表面常见的缺陷主要包括&#xff1a; 划痕&#xff1a;铝箔在生产、加工或运输过程中可能会出现划痕&#xff0c;影响外观和功能。 气泡&#x…

OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解

摘要&#xff1a;本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数&#xff08;如 mode 不同取值对应不同轮廓检索模式&#xff09;及返回值的详细解析&#xff0c;搭配…

AI之Data之Label Tool:Label Studio(多类型数据标注工具)的简介、安装和使用方法、案例应用之详细攻略

AI之Data之Label Tool&#xff1a;Label Studio(多类型数据标注工具)的简介、安装和使用方法、案例应用之详细攻略 目录 Label Studio的简介 1、特点 Label Studio的安装和使用方法&#xff1a; 1、Label Studio 提供多种安装方式 T1、使用Docker安装 T2、使用pip安装&am…

【Linux相关】服务器无网情况配置conda

【Linux相关】 服务器无网情况配置conda 文章目录 环境配置1. 本地下载miniconda&#xff0c;传到服务器2. 确认安装包是否传送成功3. 确保有安装权限4. 安装5. 写路径6. 看一下是否成功 环境配置 ssh的话&#xff0c;服务器连不上网&#xff0c;无法在线下载&#xff0c;需要本…

Redis使用场景-缓存-缓存穿透

前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题&#xff0c;其中缓存穿透、击穿、雪崩在面试中问的最频繁&#xff0c;本文加了图解&#xff0c;希望帮助你更直观的了解缓存穿透&#x1f600; &#xff08;放出之前写的针对实习面试的关于Redis生产问题的博…

Docker desktop 改变存储位置

项目场景&#xff1a; 在windows下&#xff0c;使用docker desktop是使用docker最简单直接的方式。但是&#xff0c;这毕竟是一个可视化的界面&#xff0c;使用起来还是和linux环境下的版本有很大的区别。 例如&#xff0c;使用docker desktop&#xff0c;会默认将镜像以及容…

[CA] 尝试深入理解core.cpp -1

#我给你代码&#xff0c;你给我在源代码上额外加上中文注释&#xff01;&#xff0c;如果是函数告诉我它读取了什么结构&#xff0c;传递了什么值&#xff0c;可能或者已经知道它将在哪些函数利用&#xff0c;是体现了pipeline 的哪一步# #include "core.h" #includ…

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题&#xff0c;有人认为宠物空气净化器肯定不是智商税&#xff0c;有些人认为将其购回家就是个没用的东西&#xff0c;还占地方&#xff0c;双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…

NeuIPS 2024 | YOCO的高效解码器-解码器架构

该研究提出了一种新的大模型架构&#xff0c;名为YOCO&#xff08;You Only Cache Once&#xff09;&#xff0c;其目的是解决长序列语言模型推理中的内存瓶颈。YOCO通过解码器-解码器结构的创新设计&#xff0c;显著减少推理时的显存占用并提升了长序列的处理效率。 现有大模…

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…

RT-DETR融合Inner-IoU及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Inner-IoU: More Effective Intersection over Union Loss with Auxiliary Bounding Box》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2311.02877 代码链接&a…

解决“磁盘已插上,但Windows系统无法识别“问题

电脑上有2块硬盘&#xff0c;一块是500GB的固态硬盘&#xff0c;另一块是1000GB的机械硬盘&#xff0c;按下开机键&#xff0c;发现500G的固态硬盘识别了&#xff0c;但1000GB的机械硬盘却无法识别。后面为了描述方便&#xff0c;将"500GB的固态硬盘"称为X盘&#xf…

[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))

方法一&#xff08;string&#xff09;&#xff1a; #include <iostream> #include <string> using namespace std;// 检查是否为回文数 bool isPalindrome(int n) {string str to_string(n);int left 0, right str.size() - 1;while (left < right) {if (s…

智慧防汛平台在城市生命线安全建设中的应用

随着城市化进程的加快&#xff0c;城市基础设施的复杂性和互联性不断增强&#xff0c;城市生命线的安全管理面临前所未有的挑战。智慧防汛平台作为城市生命线安全建设的重要组成部分&#xff0c;通过现代信息技术提升城市防汛应急管理的智能化水平&#xff0c;保障城市安全。 …

【R安装】VSCODE安装及R语言环境配置

目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code&#xff08;简称“VSCode” &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&…

Unity3D模型场景等测量长度和角度功能demo开发

最近项目用到多段连续测量物体长度和角度功能&#xff0c;自己研究了下。 1.其中向量角度计算&#xff1a; 需要传入三个坐标来进行计算。三个坐标确定两条向量线段的方向&#xff0c;从而来计算夹角。 public Vector3 SetAngle(Vector3 p1, Vector3 p2,Vector3 p3) { …

02-线性表

目录 2.1线性表基本概念 线性表特点 2.2线性表的顺序表示和实现 Ⅰ.顺序表的初始化 Ⅱ.顺序表的取值 Ⅲ.顺序表的查找 Ⅳ.顺序表的插入 Ⅴ.顺序表的删除 2.3线性表的链式表示和实现 单链表&#xff08;线性链表&#xff09; Ⅰ.单链表的初始化 Ⅱ.单链表的取值 Ⅲ.单链…