可视化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.hqwc.cn/news/537964.html

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

相关文章

基于PHP的数字化档案管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的数字化档案管理系统 一 介绍 此数字化档案管理系统基于原生PHP,MVC架构开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 php(mvc)mysqlbootstrapphpstudyvscode 二 功能 …

Js输入输出语句

输入语法 prompt("您想输入的是&#xff1f;")输出语法: 语法1: document.write(‘要出的内容’&#xff09; <body><script>document.write("你好")document.write("<h1>我是<h1>")</script> </body>作…

武汉星起航:秉承客户至上服务理念,为创业者打造坚实后盾

在跨境电商的激荡浪潮中&#xff0c;武汉星起航电子商务有限公司一直秉持着以客户为中心的发展理念&#xff0c;为跨境创业者提供了独特的支持和经验积累&#xff0c;公司通过多年的探索和实践&#xff0c;成功塑造了一个以卖家需求为导向的服务平台&#xff0c;为每一位创业者…

MongoDB从0到1:高效数据使用方法

MongoDB&#xff0c;作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询&#xff0c;从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…

Android 学习之追踪应用的安装情况

先上结论&#xff0c;急用的话直接看结论 结论一、借助 API 读取安装信息&#xff0c;然后上报二、借助手动埋点&#xff0c;然后上报三、对比 前提过程 结论 一、借助 API 读取安装信息&#xff0c;然后上报 通过 PackageManager 的 API&#xff0c;我们可以得知自身应用安装…

Devin内测注册全攻略:一文带你快速体验最新AI软件工程师技术 ️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

力扣刷题Days18-190颠倒二进制位(js)

目录 1&#xff0c;题目 2&#xff0c;代码 1&#xff0c;逐位颠倒 800001011 循环过程&#xff1a; 最终结果&#xff1a; 3&#xff0c;学习与总结 1&#xff0c;<< 位运算符 1&#xff0c;题目 颠倒给定的 32 位无符号整数的二进制位。 2&#xff0c;代码 1…

利用位运算符设置标志位

在写程序的过程中&#xff0c;会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写&#xff0c;首先想到的是利用int变量&#xff08;1表示不可读不可写 &#xff0c;2表示不可读可写&#xff0c;3表示可读不可写&#xff0c;4表示可读可写&#xff09;。但是这…

Challenge 6 - OSCP C

156 开放了161端口,直接snmpbulkwalk扫描 snmpbulkwalk -c public -v2c 192.168.243.156 NET-SNMP-EXTEND-MIB::nsExtendObjects得到账号密码jack:3PUKsX98BMupBiCf 试了那几个web端口,发现可以登录8083的vesta,但是需要用户名大写Jack 接着登录之后里面可以创建计划任务…

【Spring Boot系列】快速上手 Spring Boot

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

4、设计模式之建造者模式(Builder)

一、什么是建造者模式 建造者模式是一种创建型设计模式&#xff0c;也叫生成器模式。 定义&#xff1a;封装一个复杂对象构造过程&#xff0c;并允许按步骤构造。 解释&#xff1a;就是将复杂对象的创建过程拆分成多个简单对象的创建过程&#xff0c;并将这些简单对象组合起来…