可视化Relay IR

目标

为Relay IR生成图片形式的计算图。

实现方式

使用RelayVisualizer可视化Relay,RelayVisualizer定义了一组接口(包括渲染器、解析器)将IRModule可视化为节点和边,并且提供了默认解析器和渲染器。

首先需要安装依赖:

pip install graphviz

然后运行以下代码:

from tvm.driver import tvmc
from tvm.contrib import relay_viz# 加载模型为TVMCModule
model = tvmc.load('lenet5.onnx')# 使用RelayVisualizer可视化
viz = relay_viz.RelayVisualizer(model.mod)
viz.render("lenet5")

运行可以得到文本文件lenet5:

@main([Var(input.1, ty=TensorType([1, 1, 28, 28], float32))])
`--Call |--nn.relu `--Call |--add |--Call |  |--nn.dense |  |--Call |  |  |--nn.relu |  |  `--Call |  |     |--add |  |     |--Call |  |     |  |--nn.dense |  |     |  |--Call |  |     |  |  |--nn.relu |  |     |  |  `--Call |  |     |  |     |--add |  |     |  |     |--Call |  |     |  |     |  |--nn.dense |  |     |  |     |  |--Call |  |     |  |     |  |  |--reshape |  |     |  |     |  |  `--Call |  |     |  |     |  |     |--nn.max_pool2d |  |     |  |     |  |     `--Call |  |     |  |     |  |        |--nn.relu |  |     |  |     |  |        `--Call |  |     |  |     |  |           |--nn.bias_add |  |     |  |     |  |           |--Call |  |     |  |     |  |           |  |--nn.conv2d |  |     |  |     |  |           |  |--Call |  |     |  |     |  |           |  |  |--nn.max_pool2d |  |     |  |     |  |           |  |  `--Call |  |     |  |     |  |           |  |     |--nn.relu |  |     |  |     |  |           |  |     `--Call |  |     |  |     |  |           |  |        |--nn.bias_add |  |     |  |     |  |           |  |        |--Call |  |     |  |     |  |           |  |        |  |--nn.conv2d |  |     |  |     |  |           |  |        |  |--Var(Input) name_hint: input.1, shape: (1, 1, 28, 28), dtype: float32|  |     |  |     |  |           |  |        |  `--Const shape: (6, 1, 5, 5), dtype: float32|  |     |  |     |  |           |  |        `--Const shape: (6,), dtype: float32|  |     |  |     |  |           |  `--Const shape: (16, 6, 5, 5), dtype: float32|  |     |  |     |  |           `--Const shape: (16,), dtype: float32|  |     |  |     |  `--Const shape: (120, 256), dtype: float32|  |     |  |     `--Const shape: (120,), dtype: float32|  |     |  `--Const shape: (84, 120), dtype: float32|  |     `--Const shape: (84,), dtype: float32|  `--Const shape: (10, 84), dtype: float32`--Const shape: (10,), dtype: float32

因为RelayVisualizer默认渲染器plotter = TermPlotter(),默认解析器parser = TermVizParser(),如果要生成图片格式的计算图,只需要设置RelayVisualizer的plotter和parser参数为Dot渲染器和Dot解析器:

viz = relay_viz.RelayVisualizer(model.mod,plotter=relay_viz.DotPlotter(),parser=relay_viz.DotVizParser())

运行会得到pdf文件lenet.pdf,截图如下:
在这里插入图片描述

可以为Relay自定义渲染器和解析器,有需要可以点击前往官网查看,在这里就不详细介绍了。

解释

DOT语言

DOT语言是一种文本图形描述语言,它提供了一种简单的描述图形的方法,并且可以为人类和计算机程序所理解。

Example.dot:

graph Example {A -- B;B -- C;C -- A;D -- A;
}

Graphviz

Graphviz(Graph Visualization Software)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。

Graphviz运行:

dot -Tpng Example.dot -o Example.png

可以将Example.dot绘制为png格式的图片:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化表单流程编辑器为啥好用?

想要提升办公率、提高数据资源的利用率,可以采用可视化表单流程编辑器的优势特点,实现心中愿望。伴随着社会的进步和发展,提质增效的办公效果一直都是很多职场办公团队的发展需求,作为低代码技术平台服务商,流辰信息团…

(黑马出品_05)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

(黑马出品_05)SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技…

【李沐论文精读】CLIP改进工作串讲精读

参考:CLIP改进工作串讲(上)、CLIP改进工作串讲(下)、李沐精读系列、CLIP 改进工作串讲(上)笔记 由于是论文串讲,所以每个链接放在每一个小节里。 CLIP的应用如下: 回顾&a…

计算机设计大赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …

【C++练级之路】【Lv.13】多态(你真的了解虚函数和虚函数表吗?)

快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 一、虚函数与重写1.1 虚函数1.2 虚函数的重写1.3 重写的特例1.4 final和override(C11)1.…

JsonCreator注解InvalidDefinitionException报错解决

"stack_trace": "c.f.j.d.e.InvalidDefinitionException: More than one argument (#0 and left as delegating for Creator [constructor for (

【刷题节】美团2024年春招第一场笔试【技术】

1.小美的平衡矩阵 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int[][] nums new int[n][n], sum new int[n][n];char[] chars;for (int i 0; i < n; i) {…

宏任务及微任务

js有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件&#xff0c;以及执行队列中的子任务。js是单线程的&#xff08;某一刻只能执行一行代码&#xff09;&#xff0c;为了让耗时带啊不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环…

java中使用rabbitmq

文章目录 前言一、引入和配置1.引入2.配置 二、使用1.队列2.发布/订阅2.1 fanout(广播)2.2 direct(Routing/路由)2.3 Topics(主题)2.4 Headers 总结 前言 mq常用于业务解耦、流量削峰和异步通信,rabbitmq是使用范围较广,比较稳定的一款开源产品,接下来我们使用springboot的sta…

ElasticSearch学习篇10_Lucene数据存储之BKD动态磁盘树

前言 基础的数据结构如二叉树衍生的的平衡二叉搜索树通过左旋右旋调整树的平衡维护数据&#xff0c;靠着二分算法能满足一维度数据的logN时间复杂度的近似搜索。对于大规模多维度数据近似搜索&#xff0c;Lucene采用一种BKD结构&#xff0c;该结构能很好的空间利用率和性能。 …

打造完美视频,两款Mac录屏软件推荐!

“mac电脑可以进行录屏吗&#xff1f;我正在准备一次在线演示&#xff0c;需要将一些操作过程记录下来&#xff0c;这样观众可以更加清晰地了解。我尝试过一些mac录屏软件&#xff0c;但是感觉有些复杂&#xff0c;不太适合自己。请问有没有好用的mac录屏软件推荐&#xff1f;”…

一 windso10 笔记本刷linux cent os7.9系统

1:准备材料 16G以上U盘, 笔记本一台 镜像选了阿里云镜像:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 软件:链接&#xff1a;https://pan.baidu.com/s/13WDp2bBU1Pdx4gRDfmBetg 提取码&#xff1a;09s3 2:把镜像写入U盘,本人已经写入好了,选择镜像,点开始就是,确定等…

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python&#xff0c;PHP&#xff0c;JAVA&#xff0c;Go 还是 C#&#xff0c;Ruby 开发的&#xff0c;都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis&#xff0c;但是只限于会简单的使用&#xff0c;对Redis缺乏整体的认知。 无论是在大厂还是在中小…

leetcode110.平衡二叉树

之前没有通过的样例 return语句只写了一个 return abs(l-r)<1缺少了 isBalanced(root->left)&&isBalanced(root->right);补上就好了 class Solution { public:bool isBalanced(TreeNode* root) {if(!root){return true;}int lgetHeight(root->left);i…

UE5 UMG拖拽旋转

需要一个区域接收ButtonDown再在ButtonUp取消作用再在ButtonMove改变值最后tick或者ButtonMove去做动作

C++之继承

目录 一、继承的关系 二、继承方式和子类权限 三、子类构造函数 四、继承的种类 一、继承的关系 继承一定要的关系&#xff1a;子类是父类 学生是人 狗是动物 继承的实现形式&#xff1a; class 子类名&#xff1a;继承方式 父类名 { 成员变量&#xff1a; 成员函数&a…

DHCP中继实验(思科)

华为设备参考&#xff1a;DHCP中继实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 DHCP中继&#xff0c;可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段&#xff0c;则客户机可以正确地获得动态分配的IP…

Redis实现分布式锁源码分析

为什么使用分布式锁 单机环境并发时&#xff0c;使用synchronized或lock接口可以保证线程安全&#xff0c;但它们是jvm层面的锁&#xff0c;分布式环境并发时&#xff0c;100个并发的线程可能来自10个服务节点&#xff0c;那就是跨jvm了。 简单分布式锁实现 SETNX 格式&…

如何在Windows系统安装Node.js环境并制作html页面发布公网远程访问?

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

VScode(Python)使用ssh远程开发(Linux系统树莓派)时,配置falke8和yapf总结避坑!最详细,一步到位!

写在前面&#xff1a;在Windows系统下使用VScode时可以很舒服的使用flake8和yapf&#xff0c;但是在ssh远程开发树莓派时&#xff0c;我却用不了&#xff0c;总是出现问题。当时我就开始了漫长的探索求知之路。中间也请教过许多大佬&#xff0c;但是他们就讲“能用不就行了&…