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):
是否对图像进行归一化处理,默认为 False。
range (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是堆栈容器,是一种的容器。 - 头文件:#include <stack> stack的push()与pop()方法 stack.push(elem);//往栈头添加元素 stack.pop();//从栈头移除第一个元素 stack<int> stkInt; stkInt.push(1);stkInt…...

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

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

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

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

【泰克生物】酵母展示建库技术解析:构建高质量抗体文库的实用指南
酵母展示库是抗体酵母展示服务的核心组成部分。酵母展示技术利用酵母细胞表面的展示系统,将目标蛋白质(如抗体)展示在细胞膜上。这一过程首先涉及到将抗体基因克隆到酵母表达载体中。随后,表达载体被转化到酵母细胞中,…...

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

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

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

Mybatis-plus-Generator 3.5.5 自定义模板支持 (DTO/VO 等) 配置
随着项目节奏越来越快,为了减少把时间浪费在新建DTO 、VO 等地方,直接直接基于Mybatis-plus 这颗大树稍微扩展一下,在原来生成PO、 DAO、Service、ServiceImpl、Controller 基础新增。为了解决这个问题,网上找了一堆资料ÿ…...

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

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

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

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

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

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

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

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

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

Git 提取和拉取的区别在哪
1. 提取(Fetch) 操作说明:Fetch 操作会从远程仓库下载最新的提交、分支信息等,但不会将这些更改合并到你当前的分支中。它只是将远程仓库的更新信息存储在本地,并不会自动修改你当前的工作区。 使用场景: …...

【数据结构与算法 | 每日一题 | 力扣篇】力扣2390, 2848
1. 力扣2390:从字符串中删除星号 1.1 题目: 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。 返回移除 所有 星号之…...

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

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