PyTorch实战:借助torchviz可视化计算图与梯度传递

news2024/10/5 13:33:36
文章目录
    • Tensor计算的可视化(线性回归为例)
      • 如何使用可视化库torchviz
        • 安装graphviz软件
          • 安装torchviz库
          • 使用 torchviz.make_dot()

在学习Tensor时,将张量y用张量x表示,它们背后会有一个函数表达关系,y的
grad_fn
会被赋予一个对应的函数。先定义的x是一个叶子节点,将所有Tensor节点的计算连接起来就可以用一个
有向无环图
(DAG)来表示,称为
计算图
(Computational graphs)。

Computational graphs 例图:

有了图之后就可以清晰直观地理解这个模型的计算过程(forward)和梯度传递(backward)。

在初学线性回归模型的时候,同样可以把手写的线性回归模型以计算图的形式可视化表示出来,可便于深入理解代码背后的计算过程。

Tensor计算的可视化(线性回归为例)

使用的同样是“动手学深度学习的
线性回归从零实现
的例子”。

该模型的定义函数和损失函数为:

def linreg(X, w, b):
    return torch.mm(X, w) + b
    
def squared_loss(y_hat, y): 
    return (y_hat - y.view(y_hat.size())) ** 2 / 2

在训练模型时定义的损失函数为:

net = linreg
loss = squared_loss
# 因为loss完是一个10*1的张量,所以需要sum一下转换成标量以便标量求导
l = loss(net(X, w, b), y).sum()

我们可以将损失函数 l 的计算图表示出来,以
理解梯度是怎么传播
的。

这里使用torchviz的make_dot()函数将这些计算节点表示出来,在
例子
末尾添加代码,执行:

data_iter1 = data_iter(batch_size, features, labels)
X, y = next(data_iter1)  # 另取一个batch数据

l = loss(net(X, w, b), y).sum()

# 判断各节点是否是叶子节点
print(X.is_leaf) 
print(y.is_leaf)
print(w.is_leaf)
print(b.is_leaf)
print(l.is_leaf)
print(X.grad_fn)
print(l.grad_fn)

from torchviz import make_dot
make_dot(l.mean())
# 这里添加mean()是对之前的取sum()求平均,具体可以参考 自动求导的实现 相关知识。

结果显示:

True

True

True

True

False

None

<SumBackward0 object at 0x000001DC230C7DA0>

下面可以对该线性回归模型的损失函数进行分析

可以看到X,y,w,b都是计算图中的叶子节点,l表示计算流终点,它不是叶子节点。

X是叶子节点,没有
grad_fn
,即没有创建该Tensor的Function。

l代表父节点,它有创建该Tensor的Function,可以看到它的
grad_fn

SumBackward0
,也就是图中倒数第三个节点。

图中可以清晰地看到计算过程和梯度传递的可视化,包含了计算图的信息。左上蓝色框是shape为(2,1)的权重w,右上是b。因为X和y没有被赋予梯度,所以不出现在图中。

箭头的方向是计算执行的朝向,每次计算朝向下一个带
grad_fn
的节点,梯度则根据这个流向进行反传。

以上是最简单的线性模型,在之后的神经网络模型中,同样可以使用类似的方法对
模型
或者
损失函数
等计算过程进行可视化分析。可视化工具torchviz的安装使用见下。

如何使用可视化库torchviz

可视化需要安装torchviz库和graphviz软件。

安装graphviz软件
  1. 下载:

https://graphviz.org/download/

选择对应的平台的安装方式,Windows是下载安装包。

下载好以后根据向导安装,注意根据提示把graphviz添加到环境变量中去。
2. 安装成功后再cmd界面输入
dot -version
可显示版本信息


3. 安装python库:

pip install graphviz

安装torchviz库

pip install torchviz

使用 torchviz.make_dot()

使用 torchviz.make_dot() 函数就可以将Tensor计算和梯度传播过程可视化了。推荐在jupyter环境下使用。

使用方法:直接在make_dot()中传入待分析的Tensor变量即可,比如上面的例子。

如果想自行控制计算图的展示,在jupyter notebook中使用display即可:

dot = torchviz.make_dot(l)  # make_dot返回一个dot(一个Diagraph对象)
display(dot)

其它进阶使用方法可以参考官方的文档:
地址

参考文献:

https://pytorch.org/blog/computational-graphs-constructed-in-pytorch/

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

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

相关文章

2024 年首份软件漏洞报告

Action1 Corporation 发布了其首份 2024 年软件漏洞评级报告。 该报告旨在为首席信息安全官 (CISO) 和首席信息官 (CIO) 提供有关其软件生态系统的战略见解。 它根据软件供应商的安全记录对其进行评估&#xff0c;以便做出更明智的采购决策。 此次发布是在国家漏洞数据库 (N…

让在制品管理更有效

徐总的工厂生产线非常繁忙&#xff0c;每天都在不停地运转。但在制品的流转和存储也非常混乱&#xff0c;导致了很多问题的出现。 一方面&#xff0c;由于缺乏有效的管理&#xff0c;在制品的库存不断增加&#xff0c;占用了大量的资金和空间资源。这些库存不仅增加了库存成本&…

从50分到90分,网站性能优化实践

难以置信: 我可是用尊贵的Vue3Ts开发的呢 (手动狗头). 十分抗拒: 迫于yin威,我给网站做了体检和手术. 体检 – 市面上的体检套餐有很多种,但其实都是换汤不换药.那药(标准)是什么呢?我们会在下面说明.这里我选择了谷歌亲儿子"灯塔"(LightHouse)进行性能体检. 体检…

PyTorch中“No module named ‘torch._six‘“的报错场景及处理方法

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 在使用PyTorch时&#xff0c;您可能会遇到"No module named ‘torch._six’"的错误。这通常是因为PyTorch的某些…

[分布式网络通讯框架]----集群与分布式的区别

单机聊天服务器 聊天系统做了模块化设计&#xff0c;每一个模块都包含很多特定的业务 缺点&#xff1a; 单机聊天服务器极大程度的受限于硬件资源&#xff0c;服务器所能承受的用户并发量是有限的&#xff0c;即使我们通过改变最大连接量等参数&#xff0c;但是受到单机本身…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

CRMEB 多商户Java版v1.6公测版发布,付费会员上线,立即体验

新版本来袭&#xff01;CRMEB 多商户Java版v1.6正式发布&#xff01; 在v1.6新版本中&#xff0c;我们带来了付费会员体系&#xff0c;这将让商业模式更加灵活多元&#xff0c;新增加的移动端商家管理&#xff0c;也让运营触手可及&#xff0c;更加便捷&#xff0c;还有商家端员…

Pixel Heroes Fantasy Editor

使用Pixel Heroes: Fantasy Editor创建令人惊叹的像素角色!它是如何工作的?只需在编辑器中构建角色并保存动画精灵表。运行时动态构建角色使用角色构建器脚本!想将角色与不同的游戏引擎一起使用?只需制作PNG精灵表并导入其他软件! 特征: ● 角色编辑器,用于生成64x64帧的…

【SQL Server数据库】简单查询

目录 用SQL语句完成下列查询。使用数据库为SCHOOL数据库 1. 查询学生的姓名、性别、班级名称&#xff0c;并把结果存储在一张新表中。 2. 查询男生的资料。 3. 查询所有计算机系的班级信息。 4&#xff0e;查询艾老师所教的课程号。 5. 查询年龄小于30岁的女同学的学号和姓名。…

基于Java中的SSM框架实现萌宠优购系统项目【项目源码】计算机毕业设计

基于Java中的SSM框架实现萌宠优购系统演示 研究背景 现在人们在生活中、工作中压力与日俱增&#xff0c;而宠物也在人们的生活扮演者越来越重要的角色。然而&#xff0c;对于一些宠物爱好者来说&#xff0c;宠物早已经是他们生活中不可或缺的一部分。因为宠物能与人有心灵的沟…

【开放词汇分割】GroupViT: Semantic Segmentation Emerges from Text Supervision

论文链接&#xff1a;GroupViT: Semantic Segmentation Emerges from Text Supervision 代码链接&#xff1a;https://github.com/NVlabs/GroupViT/tree/main 作者&#xff1a;Jiarui Xu, Shalini De Mello, Sifei Liu, Wonmin Byeon, Thomas Breuel, Jan Kautz, Xiaolong Wa…

Centos 9Ubuntu 22.0.3图形搭建网桥

1、安装bridge-utils软件 [root@devcops612 ~]# yum install bridge-utils.x86_64 2、创建桥接器 [root@devcops612 ~]# cd /etc/NetworkManager/system-connections [root@devcops612 ~]# nmcli connection show #查看网络连接,确认桥接物理接口 [root@devcops612 system…

吴恩达机器学习作业ex4:反向神经网络学习(Python实现)详细注释

文章目录 1.神经网络1.1 可视化数据1.2 模型表示1.3 前馈和成本函数1.4 正则化代价函数 2.反向传播2.1 Sigmoid的导数2.2随机初始化2.3 反向传播2.4梯度检测2.5 正则化神经网络2.6 优化参数 3.可视化隐藏层 1.神经网络 在上一个练习中&#xff0c;您为神经网络实现了前馈传播&…

Steam怎么卸载DLC Steam怎么只卸载DLC不卸载游戏教程

我们玩家在steam中玩游戏&#xff0c;有一个功能特别重要&#xff0c;那就是DLC&#xff0c;其实也就是一款游戏的扩展&#xff0c;很多游戏都有DLC&#xff0c;让游戏玩法特别丰富&#xff0c;比如都市天际线的DLC&#xff0c;给城市中就增加了很多建筑&#xff0c;或者更便捷…

第十二次作业

成功做出insert 点击新增跳转到insert.html 点击增加&#xff0c;跳转回studentinformation2.html 数据表和页面都显示出新增的数据了 成功做出来删除 点击删除按钮 点击确定&#xff0c;丽丽被成功删除&#xff01; 一些代码

【Linux】进程间通信_2

文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 1. 进程间通信分类 管道 管道的四种情况&#xff1a; ①管道内部没有数据&#xff0c;并且具有写端的进程没有关闭写端&#xff0c;读端就要阻塞等待&#xff0c;知道管道pipe内部有数据。 ②管道内部…

混合云管道的未来:集成 MinIO、Tailscale 和 GitHub Actions

数据处理是现代软件开发的基本实践。它使团队能够自动收集、处理和存储数据&#xff0c;确保高质量的数据和高效的处理。 在本文中&#xff0c;我们将探讨如何建立一个全面的数据处理管道&#xff0c;重点介绍如何使用 Tailscale GitHub Action 进行安全网络。此设置还将包含 …

MindManager2024思维导图大升级!轻松绘制思维导图

思维导图大升级&#xff01;MindManager2024新体验 最近在用MindManager2024制作思维导图&#xff0c;感觉它是一款非常专业的软件。它的界面设计简洁明了&#xff0c;操作流畅&#xff0c;让我能够轻松地整理思绪、规划计划和记录灵感&#x1f4a1;。 MindManager思维导图工具…

电商平台是申请ICP许可证还是EDI许可证?

随着直播行业大火热&#xff0c;越来越多的企业开始从事电商业务&#xff0c;那么电商平台的&#xff0c;需要办理什么许可证&#xff1f;是ICP许可证还是EDI许可证&#xff1f;今天小编为您详细说明一下。 首先&#xff0c;不管是ICP许可证还是EDI许可证&#xff0c;都属于增…

写一个坏越的个人天地(三)

昨天卡巴卡巴还是投出了学习代码以来的第一份简历,遇到好的岗位还是想争取下的吧,虽然我觉得大概率还是gg了。 昨天完成了首页的上半部分 下半部分我的构思是左右栏,左侧为菜单栏,右侧为业务栏,左侧调整右侧router进行切换内容 可以用来展示js css的小demo 稍微调整下ro…