当前位置: 首页 > news >正文

PyTorch详解-可视化模块

PyTorch详解-可视化模块

    • Tensorboard 基础与使用
      • 启动 TensorBoard
      • 访问 TensorBoard
      • 使用 TensorBoard
      • SummaryWriter类介绍
        • 参数说明
        • 常用方法
      • CNN卷积核与特征图可视化
        • 参数说明
        • 返回值
      • 混淆矩阵与训练曲线可视化
        • 混淆矩阵可视化
        • 训练曲线绘制
      • 模型参数打印
        • 参数说明
        • 输出解释

Tensorboard 基础与使用

TensorBoard 是一个非常流行的工具,用于可视化 TensorFlow 和 PyTorch 等深度学习框架的训练过程。它可以用来监控训练过程中的各种指标,如损失函数、准确率等,并且可以直观地展示模型结构、权重分布等信息。

启动 TensorBoard

启动 TensorBoard 需要在命令行中指定日志文件所在的目录。

tensorboard --logdir=./logs

如果系统找不到 tensorboard 命令,可能需要使用绝对路径调用它:

python -m tensorboard.main --logdir=./logs

访问 TensorBoard

启动后,TensorBoard 会默认在本地服务器的端口 6006 上运行。可以通过浏览器访问 http://localhost:6006 来查看 TensorBoard 的界面。

使用 TensorBoard

TensorBoard 提供了多个不同的面板来展示不同的信息:
Scalars:显示标量值的变化,如损失函数或准确率。
Graphs:显示计算图,包括操作节点和张量流。
Images:显示图像数据,可用于查看输入图像或中间层的激活。
Histograms:显示权重、偏置或其他变量的直方图。
Distributions and Profiles:显示分布信息和性能分析。
Embeddings:显示高维数据的嵌入表示。
Pruning:显示模型剪枝的信息。
Hyperparameter Tuning:显示超参数搜索的结果。
Projector:用于探索高维数据的可视化工具。

SummaryWriter类介绍

SummaryWriter 类位于 torch.utils.tensorboard 模块中,用于记录训练过程中的各种数据,如标量、图像、直方图等,并将这些数据写入磁盘,以便 TensorBoard 可视化工具加载和显示。

CLASS torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')
参数说明

log_dir (str, optional):

  • 日志文件的保存位置,默认为 ‘runs/experiment_name’。
  • 如果省略,则默认在当前工作目录下的 runs 文件夹中创建一个新的子文件夹。
  • 示例:‘runs/my_experiment’。

comment (str, optional):

  • 添加到日志文件夹名称后的评论字符串。

  • 默认为空字符串 ‘’。
    purge_step (int, optional):

  • 删除旧的事件文件的步骤数。

  • 如果为 None,则不会删除任何文件。

  • 如果为整数,则在达到此步骤数后,将删除旧的事件文件。
    max_queue (int, optional):

  • 待写入的日志事件的最大队列大小,默认为 10。

  • 较大的队列可以减少写入磁盘的频率,从而提高性能。
    flush_secs (int, optional):

  • 写入事件到磁盘的间隔时间(秒),默认为 120 秒。

  • 较短的时间间隔可以更快地看到更新,但可能会增加 I/O 开销。
    filename_suffix (str, optional):

  • 附加到事件文件名末尾的后缀,默认为空字符串 ‘’。

  • 可以用于区分不同的日志文件。

常用方法

add_scalar(tag, scalar_value, global_step=None, walltime=None)

  • tag:字符串形式的标签,用于区分不同类型的标量数据。
  • scalar_value:要记录的标量值。
  • global_step:全局步骤数,用于绘制随时间变化的趋势图。
  • walltime:可选的时间戳,用于精确控制数据点的时间。
  • 功能:添加标量;tag的设置可以有个技巧是在同一栏下绘制多个图,如’Loss/train’, ‘Loss/Valid’, 这就类似于matplotlib的subplot(121), subplot(122)

add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)

  • 功能:在一个坐标轴中绘制多条曲线。常用于曲线对比。

add_image(tag, img_tensor, global_step=None, dataformats=‘CHW’)

  • tag:字符串形式的标签,用于区分不同类型的图像数据。
  • img_tensor:图像数据,通常为 torch.Tensor 类型。
  • global_step:全局步骤数。
  • dataformats:图像数据的维度顺序,默认为 ‘CHW’(通道、高度、宽度)。
  • 功能:绘制图像。

add_images(tag, img_tensor, global_step=None, walltime=None, dataformats=‘NCHW’)

  • 功能:绘制图像序列,常用于数据清洗,卷积核,特征图的可视化。

add_figure(tag, figure, global_step=None, close=True, walltime=None)

  • 功能:将matplotlib的figure绘制到tensorboard中。

add_histogram(tag, values, global_step=None, bins=‘tensorflow’)

  • tag:字符串形式的标签,用于区分不同类型的直方图数据。
  • values:要记录的数据值。
  • global_step:全局步骤数。
  • bins:直方图的分箱方式,默认为 ‘tensorflow’。
  • 功能:绘制直方图。这里的global_step表明会得到多个直方图。在tensorboard界面,需要进入HISTOGRAM中才能看到直方图可视化。

add_graph(model, input_to_model=None, verbose=False)

  • model:要记录的模型。
  • input_to_model:模型的输入数据。
  • verbose:是否输出详细的日志信息。
  • 功能:绘制pytorch模型拓扑结构图。

add_embedding(mat, metadata=None, label_img=None, global_step=None, tag=‘default’)

  • mat:嵌入矩阵。
  • metadata:元数据,如类别标签。
  • label_img:用于标记的图像数据。
  • global_step:全局步骤数。
  • tag:字符串形式的标签。
  • 功能:绘制高维数据在低维的投影

close()

  • 关闭 SummaryWriter 实例,释放资源。
add_video:绘制视频add_audio:绘制音频,可进行音频播放。add_text:绘制文本add_pr_curve:绘制PR曲线,二分类任务中很实用。add_mesh:绘制网格、3D点云图。add_hparams:记录超参数组,可用于记录本次曲线所对应的超参数。

CNN卷积核与特征图可视化

torchvision.utils.make_grid 是一个用于将多个图像排列成一个网格图像的函数。这个函数在 PyTorch 中非常有用,特别是在需要可视化一批图像的时候,比如在训练神经网络的过程中查看输入图像或中间层的特征图。

torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0, **kwargs)
参数说明
tensor (Tensor or list of tensors):
输入的图像张量或张量列表。如果输入是张量,则形状应为 (batch_size, channels, height, width)(channels, height, width)。
nrow (int, optional):
每行中图像的数量,默认为 8。
padding (int, optional):
图像之间的填充像素数量,默认为 2。
normalize (bool, optional):
是否对图像进行归一化处理,默认为 Falserange (tuple, optional):
归一化的范围,如果 normalize=True,则使用此参数指定归一化的最小值和最大值。
scale_each (bool, optional):
是否单独对每个图像进行归一化处理,默认为 False。
pad_value (float, optional):
填充像素的值,默认为 0**kwargs (dict, optional):
其他可选参数,例如 dtype 等。
返回值
Tensor:
返回一个排列后的网格图像张量,形状为 (channels, grid_height, grid_width)

混淆矩阵与训练曲线可视化

混淆矩阵可视化
show_conf_mat(confusion_mat, classes, set_name, out_dir, epoch=999, verbose=False, perc=False)
"""
混淆矩阵绘制并保存图片
:param confusion_mat:  nd.array
:param classes: list or tuple, 类别名称
:param set_name: str, 数据集名称 train or valid or test?
:param out_dir:  str, 图片要保存的文件夹
:param epoch:  int, 第几个epoch
:param verbose: bool, 是否打印精度信息
:param perc: bool, 是否采用百分比,图像分割时用,因分类数目过大
:return:
"""
训练曲线绘制

loss曲线是需要将训练与验证放在一起看的,单独看一条曲线是不够的。通过训练loss看偏差,通过训练loss与验证loss看方差。偏差看的是模型拟合能力是否足够,方差是看模型泛化性能是否足够,是否存在过拟合。

模型参数打印

torchinfo 是一个用于分析 PyTorch 模型结构和计算复杂度的库。它可以方便地展示模型的每一层的信息,包括输入输出形状、参数数量等,对于理解模型架构和优化模型非常有帮助。

参数说明

model (nn.Module):

  • 需要分析的 PyTorch 模型实例。

input_size (tuple):

  • 输入数据的形状。例如 (batch_size, channels, height, width)。
输出解释

torchinfo.summary 会输出模型每一层的信息,包括:

  • Layer name (层名):模型中的层名。
  • Output Shape (输出形状):该层输出的形状。
  • Param # (参数数量):该层的参数数量。
  • Total params (总参数数量):模型的总参数数量。
  • Trainable params (可训练参数数量):模型中可训练的参数数量。
  • Non-trainable params (不可训练参数数量):模型中不可训练的参数数量。

参考:https://tingsongyu.github.io/PyTorch-Tutorial-2nd/chapter-6/
参考:https://pytorch-cn.readthedocs.io/zh/latest/
参考:https://datawhalechina.github.io/thorough-pytorch/

相关文章:

PyTorch详解-可视化模块

PyTorch详解-可视化模块 Tensorboard 基础与使用启动 TensorBoard访问 TensorBoard使用 TensorBoardSummaryWriter类介绍参数说明常用方法 CNN卷积核与特征图可视化参数说明返回值 混淆矩阵与训练曲线可视化混淆矩阵可视化训练曲线绘制 模型参数打印参数说明输出解释 Tensorboa…...

Bootstrap 警告信息(Alerts)使用介绍

本章将讲解警告(Alerts)以及 Bootstrap 所提供的用于警告的 class。警告(Alerts)向用户提供了一种定义消息样式的方式。它们为典型的用户操作提供了上下文信息反馈。 您可以为警告框添加一个可选的关闭按钮。为了创建一个内联的可…...

uniapp(H5)设置反向代理,设置成功后页面报错

设置反向代理后,页面报错图: 反向代理代码:devServer下面就是配置对应的代理,一般这样就没问题了 "h5": {"router": {"mode": "hash"},"devServer": {"port": 517…...

define、typedef和using的使用

define、typedef 和 using 是 C(以及 C 语言中的 define)中用于定义别名或简化复杂类型的三个关键字,但它们各自有着不同的用途和行为。下面将分别对比这三个关键字: 1. #define 定义方式:#define 是预处理指令&…...

vue element时间选择不能超过今天 时间选中长度不能超过7天

背景: 使用elenmet plus 组件实现时间选择;且日期时间选择不能超过今天;连续选中时间的长度范围不能超过7天 效果展示: 实现思路: 一、使用element组件自带的属性和方法; :disabled-date"disabledDate…...

如何 吧一个 一维数组 切分成相同等分,一维数组作为lstm的输入(三维数据)的数据预处理 collate_fn的应用

要将一个一维数组切分成相同等分,你可以使用 Python 的内置功能或者 NumPy 库(如果你处理的是数值数据)。以下是几种不同的方法: 方法3 pad_sequence 结合dataloader 应该是最佳方案 ### 方法 1: 使用 Python 的内置切片功能 如果…...

Remix 学习 - @remix-run/react 中主要的 hooks

在 remix-run/react 中,有几个常用的 hooks,它们帮助你在 Remix 应用中处理路由、数据加载和其他功能。以下是一些主要的 hooks: useLoaderData: 用于获取从 loader 函数中返回的数据。 通常在组件中调用,以便访问路由加载的数据…...

STL之stack

stack容器 - 先进后出” - stack是堆栈容器&#xff0c;是一种的容器。 - 头文件&#xff1a;#include <stack> stack的push()与pop()方法 stack.push(elem);//往栈头添加元素 stack.pop();//从栈头移除第一个元素 stack<int> stkInt; stkInt.push(1);stkInt…...

如何用3个月零基础入门网络安全?_网络安全零基础怎么学习

前 言 写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全&#xff0c;实现自己的“黑客梦”。文章的宗旨是&#xff1a; 1.指出一些自学的误区 2.提供客观可行的学习表 3.推荐我认为适合小白学习的资源.大佬绕道哈&#xff01; →点击获取网络安全资料攻略← 一、自学…...

适合学生党开学买的蓝牙耳机?分享开放式耳机排行榜前十名

学生党开学想买耳机的话&#xff0c;我觉得比较适合入手开放式耳机&#xff0c;因为这类耳机佩戴舒适度高&#xff0c;长时间使用也不会感到不适或疲劳&#xff0c;同时保持耳道干爽透气&#xff0c;更加健康卫生&#xff0c;还能提供自然、开阔的音场&#xff0c;音质表现优秀…...

汽车租赁系统1.0版本

汽车租赁系统1.0版本比较简陋&#xff0c;以后还会有2.0、3.0……就像《我爱发明》里面的一代机器二代机器&#xff0c;三代机器一样&#xff0c;是一个迭代更新的过程&#xff08;最近比较忙&#xff0c;可能会很久&#xff09;&#xff0c;这个1.0版本很简陋&#xff0c;也请…...

DockerDocker Compose安装(离线+在线)

Docker&Docker Compose安装(离线在线) Docker离线安装 下载想要安装的docker软件版本&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 如目标机无法从链接下载&#xff0c;可以在本机下载后 scp docker版本压缩包[如docker-20.10.9.tgz] usernameh…...

【泰克生物】酵母展示建库技术解析:构建高质量抗体文库的实用指南

酵母展示库是抗体酵母展示服务的核心组成部分。酵母展示技术利用酵母细胞表面的展示系统&#xff0c;将目标蛋白质&#xff08;如抗体&#xff09;展示在细胞膜上。这一过程首先涉及到将抗体基因克隆到酵母表达载体中。随后&#xff0c;表达载体被转化到酵母细胞中&#xff0c;…...

QT Mode/View之View

目录 概念 使用已存在的视图 使用模型 使用模型的多个视图 处理元素的选择 视图间共享选择 概念 在模型/视图架构中&#xff0c;视图从模型中获取数据项并将它们呈现给用户。数据的表示方式不必与模型提供的数据表示形式相似&#xff0c;而且可能与用于存储数据项的底层数…...

URP 线性空间 ui资源制作规范

前言&#xff1a; 关于颜色空间的介绍&#xff0c;可参阅 unity 文档 Color space URP实现了基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui资源在unity中进行透明度混合时&#xff…...

如何精确统计Pytorch模型推理时间

文章目录 0 背景1 精确统计方法2 手动synchronize和Event适用场景 0 背景 在分析模型性能时需要精确地统计出模型的推理时间&#xff0c;但仅仅通过在模型推理前后打时间戳然后相减得到的时间其实是Host侧向Device侧下发指令的时间。如下图所示&#xff0c;Host侧下发指令与De…...

Mybatis-plus-Generator 3.5.5 自定义模板支持 (DTO/VO 等) 配置

随着项目节奏越来越快&#xff0c;为了减少把时间浪费在新建DTO 、VO 等地方&#xff0c;直接直接基于Mybatis-plus 这颗大树稍微扩展一下&#xff0c;在原来生成PO、 DAO、Service、ServiceImpl、Controller 基础新增。为了解决这个问题&#xff0c;网上找了一堆资料&#xff…...

C#环境下MAC地址获取方法解析

在C#中&#xff0c;获取MAC地址并不是直接支持的&#xff0c;因为出于安全和隐私的考虑&#xff0c;操作系统通常会限制对这类硬件信息的直接访问。不过&#xff0c;仍然可以通过一些方法间接地获取到本地网络接口&#xff08;比如以太网接口&#xff09;的MAC地址。 以下是几…...

(k8s)Kubernetes 从0到1容器编排之旅

一、引言 在当今数字化的浪潮中&#xff0c;Kubernetes 如同一艘强大的航船&#xff0c;引领着容器化应用的部署与管理。它以其卓越的灵活性、可扩展性和可靠性&#xff0c;成为众多企业和开发者的首选。然而&#xff0c;要真正发挥 Kubernetes 的强大威力&#xff0c;仅仅掌握…...

Rust Web开发框架对比:Warp与Actix-web

文章目录 Rust Web开发框架对比&#xff1a;Warp与Actix-web引言框架概述Warp框架简介Actix-web框架简介 设计理念Warp的设计理念Actix-web的设计理念 性能比较可扩展性和生态插件和中间件支持社区和文档 使用示例使用Warp构建简单的HTTP服务使用Actix-web构建简单的HTTP服务 学…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...