当前位置: 首页 > 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服务 学…...

F12抓包12:Performance(性能)前端性能分析

课程大纲 使用场景: ① 前端界面加载性能测试。 ② 导出性能报告给前端开发。 复习&#xff1a;后端(接口)性能分析 ① 所有请求耗时时间轴&#xff1a;“网络”&#xff08;Network&#xff09; - 概览。 ② 单个请求耗时&#xff1a;“网络”&#xff08;Network&#xf…...

数据结构(Day13)

一、学习内容 内存空间划分 1、一个进程启动后&#xff0c;计算机会给该进程分配4G的虚拟内存 2、其中0G-3G是用户空间【程序员写代码操作部分】【应用层】 3、3G-4G是内核空间【与底层驱动有关】 4、所有进程共享3G-4G的内核空间&#xff0c;每个进程独立拥有0G-3G的用户空间 …...

链表的快速排序(C/C++实现)

一、前言 大家在做需要排名的项目的时候&#xff0c;需要把各种数据从高到低排序。如果用的快速排序的话&#xff0c;处理数组是十分简单的。因为数组的存储空间的连续的&#xff0c;可以通过下标就可以简单的实现。但如果是链表的话&#xff0c;内存地址是随机分配的&#xf…...

css总结(记录一下...)

文字 语法说明word-wrapword-wrap:normal| break-word normal:使用浏览器默认的换行 break-word:允许在单词内换行 text-overflow clip:修剪文本 ellipsis:显示省略符号来代表被修剪的文本 text-shadow可向文本应用的阴影。能够规定水平阴影、垂直阴影、模糊距离&#xff0c;以…...

SpringBoot 处理 @KafkaListener 消息

消息监听容器 1、KafkaMessageListenerContainer 由spring提供用于监听以及拉取消息&#xff0c;并将这些消息按指定格式转换后交给由KafkaListener注解的方法处理&#xff0c;相当于一个消费者&#xff1b; 看看其整体代码结构&#xff1a; 可以发现其入口方法为doStart(),…...

Spring Boot-API版本控制问题

在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;版本控制是一项至关重要的技术。随着应用的不断迭代&#xff0c;API 的改动不可避免&#xff0c;如何在引入新版本的同时保证向后兼容&#xff0c;避免对现有用户的影响&#xff0c;是每个开发者需要考虑的…...

Git 提取和拉取的区别在哪

1. 提取&#xff08;Fetch&#xff09; 操作说明&#xff1a;Fetch 操作会从远程仓库下载最新的提交、分支信息等&#xff0c;但不会将这些更改合并到你当前的分支中。它只是将远程仓库的更新信息存储在本地&#xff0c;并不会自动修改你当前的工作区。 使用场景&#xff1a; …...

【数据结构与算法 | 每日一题 | 力扣篇】力扣2390, 2848

1. 力扣2390&#xff1a;从字符串中删除星号 1.1 题目&#xff1a; 给你一个包含若干星号 * 的字符串 s 。 在一步操作中&#xff0c;你可以&#xff1a; 选中 s 中的一个星号。移除星号 左侧 最近的那个 非星号 字符&#xff0c;并移除该星号自身。 返回移除 所有 星号之…...

破解信息架构实施的密码:常见挑战与最佳解决方案全指南

信息架构的成功实施是企业数字化转型的关键步骤&#xff0c;但在实际操作中&#xff0c;企业往往会遇到各种复杂的挑战。这些挑战包括 技术整合的难度、数据管理的复杂性、合规性要求的变化 以及 资源限制 等。《信息架构&#xff1a;商业智能&分析与元数据管理参考模型》为…...

CodeChef Starters 151 (Div.2) A~D

codechef是真敢给分&#xff0c;上把刚注册&#xff0c;这把就div2了&#xff0c;再加上一周没打过还是有点不适应的&#xff0c;好在最后还是能够顺利上分 今天的封面是P3R的设置菜单 我抠出来做我自己的游戏主页了&#xff08; A - Convert string 题意 在01串里面可以翻转…...