可视化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格式的图片:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python工具方法 47 基于paddleseg将目标检测数据升级为语义分割数据

在进行项目研究时,通常需要搜集开源数据集。但是所能搜集到的数据集通常会存在形式上的差异,比如我想要的是语义分割数据,而搜集到的数据集却是目标检测数据;在这种情况下所搜集的数据就完成没有利用价值了么?不,其还存在价值,我们可以通过模型训练对数据标签的标注粒度…

网站首页添加JS弹屏公告窗口教程

很多小白站长会遇到想给自己的网站添加一个弹屏公告&#xff0c;用于做活动说明、演示站提示等作用与目的。 下面直接上代码&#xff1a;&#xff08;直接复制到网页头部、底部php、HTML文件中&#xff09; <script src"https://www.mohuda.com/site/js/sweetalert.m…

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤&#xff0c;下面我们来看一下Nacos集群的工作原理&#xff0c;一共有两部分&#xff1a;Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…

编程四十载 - 总结了 13 条建议

原文&#xff1a;Theo Leggett - 2024.03.12 引言 10 PRINT "HELLO" 20 GOTO 10&#xff08;注&#xff1a;这段代码是 BASIC 语言&#xff0c;无限循环打印 “HELLO”&#xff09; 1984 年的 4 月&#xff0c;我的父亲为自己的家庭办公室&#xff0c;购买了一台电…

用户数据的FLASH存储与应用(FPGA架构)

该系列为神经网络硬件加速器应用中涉及的模块接口部分&#xff0c;随手记录&#xff0c;以免时间久了遗忘。 一 背景 我们知道&#xff0c;在FPGA做神经网络应用加速时&#xff0c;涉及到权重参数的存储和加载。通常在推理过程中&#xff0c;会将权重参数存储在外部DDR或片上S…

数据资产在制造行业的应用:释放潜在价值,驱动产业升级

随着信息技术的飞速发展&#xff0c;数据已成为各行各业的重要资产。在制造行业中&#xff0c;数据资产的应用更是日益广泛&#xff0c;为企业的生产、管理、决策等各个环节带来了前所未有的变革。本文将深入探讨数据资产在制造行业的应用&#xff0c;以及如何通过数据驱动实现…

C/C++中{}的用法总结(全)

C基础专栏&#xff1a;http://t.csdnimg.cn/UjhPR 目录 1.定义初始化列表&#xff08;Initializer List&#xff09; 2.类成员初始化列表 3.无默认构造函数的类的默认初始化&#xff08;C11 及以后版本&#xff09; 4.初始化器列表构造函数&#xff08;C11 及以后版本&…

HCIP —— 三层架构

企业网的三层架构 园区网络 常见的行业园区网 按照传输介质分类&#xff0c;可以将网络分为有线网络、无线网络和光纤网。 无线网络是有线网络的最后一公里。 无线网络 无线网络 --- Access Point --- 简称 AP --- 无线接入点 路由器上的WAN口:用于连接运营商的接口 路由器…

vue右键自定义样式

<!-- eslint-disable vue/no-dupe-keys --> <template><div><div class"search-box"><div class"search"><el-input placeholder"搜索" prefix-icon"el-icon-search" v-model"input2">…

STM32OLED调试工具

OLED介绍 4个引脚的oled &#xff1a; GND引脚接地&#xff0c;VCC接3.3v的电源 SCL与SDA是I2C通信的引脚 使用OLED显示屏驱动函数模块 接线图 将oled函数调试的代码引入到工程项目中 oled工程代码 OLED.C文件代码 #include "stm32f10x.h" #include "OLED_Font…

自定义方法SQL注入器-DefaultSqlInjector

/*** 自定义Sql注入* author zy*/ public class SqlInjector extends DefaultSqlInjector {Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {// 注意&#xff1a;此SQL注入器继承了DefaultSqlInjector(默认注入器…

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

2024年初中生古诗文大会备考:多选题真题和独家解析(持续更新)

今天我们继续来做初中古诗文大会的一道难题&#xff1a;多选题&#xff0c;让大家了解初中生古诗文大会的考察内容和形式&#xff0c;并且提供了我独家的题目解析和答案&#xff0c;供初中的同学们学习和参考。 Tips&#xff1a;古诗文大会的许多题目都来自于中考、高考&#…

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;

springmvc学习笔记1

springmvc学习笔记part1 总概述图创建步骤创建project并在父工程中导入配置类添加为web工程检查maven配置写handller方法写配置类SpringMVC环境搭建项目部署关键步骤总结 具体设置路径设置注解接收参数&#xff08;重点param参数接收路径参数接收json参数接收请求头接收和cooki…

【Unity】persistentDataPath、streamingAssetsPath和dataPath

介绍 我们在用Unity进行开发时&#xff0c;资源路径是我们最常用到的&#xff0c;下面我就来简单介绍一下几种常用的路径。 1.dataPath dataPath是包含游戏数据文件夹的路径&#xff0c;是app程序包安装路径 Windows: xxx /Assets &#xff08;如下图&#xff09; Mac: xxx…

canvas绘制圆形进度条

canvas绘制圆形进度条 用canvas绘制了一个圆形进度条&#xff0c;记录一下&#xff1a; 效果如下&#xff1a; 感觉效果还行&#xff0c;不过有待优化 代码如下&#xff1a; 我是用Vue写的 组件的代码&#xff1a; progressCanvas.vue <template><div><can…

深度学习——基本数据类型创建Tensor(持续更新)

声明&#xff1a;本深度学习笔记基于课时18 索引与切片-1_哔哩哔哩_bilibili学习而来 All is about Tensor 定义&#xff1a;Tensors are simply mathematical objects that can be used to describe physical properties, just like scalars and vectors. In fact tensors a…

C语言黑魔法第三弹——动态内存管理

本文由于排版问题&#xff0c;可能稍显枯燥&#xff0c;但里面知识点非常详细&#xff0c;建议耐心阅读&#xff0c;帮助你更好的理解动态内存管理这一C语言大杀器 进阶C语言中有三个知识点尤为重要&#xff1a;指针、结构体、动态内存管理&#xff0c;这三个知识点决定了我们…

QT定时器使用

实现功能&#xff1a;在界面中显示日期跟时间&#xff0c;并时刻刷新 实现原理&#xff1a;定时器能反馈程序运行的时间&#xff0c;通过设定定时器的启动间隔可以实现对时间的更新 步骤&#xff1a; 1.设定两个QString分别获取系统当前的日期和时间&#xff0c;并导入到labl…