模型可视化

news2025/3/11 9:10:52

模型标题可视化

可视化工具:Graphiz、Netron、ZetaneEngine

7.2.2Graphiz可视化工具

Graphiz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,使用它可以非常方便地对任何图形进行可视化。
Graphiz的使用步骤包括创建图,添加节点与边,渲染图,下面是一个简单的案例。

import graphviz

#创建图
dot = graphviz.Digraph(comment = 'example')

#添加节点与边
dot. node('A', 'leader')
dot. node('B', 'chargeman')
dot. node('C', 'member')
dot. node('D', 'member')

dot.edges(['AB', 'AC', 'AD', 'BC', 'BD'])

#渲染图
dot.render('test-output/team.gv', view = True)

可视化结果如图7.2所示。

下面我们使用Graphiz对模型结构进行可视化,核心代码如下:

# coding: utf8
import torch
import torch. nn as nn
import torch. nn. functional as F
from torch.autograd import Variable
import numpy as np
#使用Graphiz进行PyTorch网络结构可视化
def make_dot(var, params = None):
    #将PyTorch autograd graph生成Graphiz图
    # var:输出变量
    # params:用于添加节点的字典

    if params is not None:
        assert isinstance(params.values()[0],Variable)
        param_map =(id(v):k for k,v in params.items())
        #设置属性
        node_attr =dict (style ='filled',
                         shape ='box',
                         align ='left',
                         fontsi ze ='12',
                         rankse p ='0.1',
                         height ='0.2')
        #创建图
        dot =Digraph(node_attr=node_attr,graph_attr=dict(size="12,12"))
        seen =set()
        def size_to_str(size):
            return' ('+(',').join(['%d' %v for v in size])+')'
        #添加节点
        def add_nodes(var):
            if var not in seen:
                if torch.is_tensor(var):
                    dot.node(str(id(var)),size_to_str(var.size()),fillcolor='orange')
                elif hasattr(var,'variable'):
                    u =var.variable
                    name =param_map[id(u)]if params is not None else ''
                    node_name ='%s\n %s' %((name,size_to_str(u.size()))
                    dot.node(str(id(var)),node_name,fillcolor='lightblue')
                  else:
                     dot.node(str(id(var)),str(type(var)._name_))
                  seen.add(var)
                  if hasattr(var,'next_functions'):
                     for u in var.next_functions:
                         if u[0]is not None:
                            dot.edge(str(id(u[0])),str(id(var)))
                            add_nodes(u[0])
                         if hasattr(var,'saved_tensors'):
                            for t in var.saved_tensors:
                               dot.edge (str(id(t)),str(id(var)))
                               add_nodes(t)
        add_nodes(var.grad_fn)
        return dot
                                           
 if _name_=='_main_':
 	x =torch.randn(1,3,48,48)
    model =simpleconv3(2)
    y =model(x)
    g =make_dot(y)
    g.view()     
                                      

对上面模型结构进行可视化的结果如图7.3所示

7.2.3 Netron可视化工具

  • Netron可以可视化各大深度学习开源框架模型结构和权重的项目
  • 项目地址为https://github.com/lutzroeder/network
  • Netron支持常见的桌面操作系统,包括macOS、Linux、Windows,以及可以在网页端在线使用。

对于PyTorch模型,我们可以直接载入PT格式的权重文件进行可视化,但是更好的做法是将其先转换为ONNX 格式,转换代码如下:

import torch
from net import simpleconvs
mynet =simpleconvis(2)
mynet.load_state_dict(torch.load('mode1.pt',map_location=lambda storage,loc:storage))
mynet.train(False)
dummy_input =torch.randn((1,3,48,48))
torch.onnx.export(mynet,dummy_input,"model.onnx",verbose=False)

可视化结果如图7.4所示。

通过可视化模型结构,我们对需要训练的网络有了整体的了解,修改代码后可以查看模型结构的变化情况,从而检查是否符合设计的目的,这在训练大模型与小模型时都是非常实用的技术。

如果输入的是训练好的权重文件,则可以直接查看每一个网络层的权重,通过一键导出参数为NPY 文件,可以简单统计权重的分布。
如图7.5所示为模型的权重统计结果,横坐标表示幅值大小,纵坐标表示比例,总共分为100个bin,统计范围为-2∼2。可以看出,大部分的值都非常接近于0,这说明模型有很好的稀疏性。

网络浅层/底层深层越深层
学习到的特征边缘目标形状语义级别的目标
感受野越小,看到的就是越局部的信息越大,看到的就是越全局的信息,学习到的知识越抽象

7.3 模型可视化分析

摘要:3D可视化工具ZetaneEngine,可视化网络中任何一层的特征图。特征图的展示方式比较丰富,支持二维图、三维图和数值直方图。图7.9和图7.10是可视化的例子

为了方便查看模型的参数及特征,有许多研究者都开发过相关的工具,这里介绍一个功能比较完善的工具,那就是由加拿大蒙特利尔一家公司开发的一个3D可视化工具ZetaneEngine

上传一个模型和数据,该工具可以可视化网络中任何一层的特征图,特征图的展示方式比较丰富,支持二维图、三维图和数值直方图,下面就是对上一节中ONNX格式模型的可视化界面图

图7.9展示了对输入数据的可视化结果,UserInput表示输入,可以看到,左侧图像原始大小为(RGB的三个通道分别用灰度图展示,而模型的输入张量大小为右上方展示了对所有灰度值的直方图统计,最大像素灰度值为255,最小像素灰度值为24,平均像素灰度值为155,右下方则通过伪彩色的方式显示了输入的一个通道。

图7.10展示了对卷积层特征的可视化结果,输出特征图大小为1×12×23×23,,左侧展示了平铺的一些特征图,右下方则展示了3D的视角。

参考文献:
《深度学习之图像识别 核心算法与实战案例 (全彩版)》 言有三 著
出版社:清华大学出版社
出版时间:2023年7月第一版(第一次印刷)
ISBN:978-7-302-63527-7

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

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

相关文章

【ChatIE】论文解读:Zero-Shot Information Extraction via Chatting with ChatGPT

文章目录 介绍ChatIEEntity-Relation Triple Extration (RE)Named Entity Recognition (NER)Event Extraction (EE) 实验结果结论 论文:Zero-Shot Information Extraction via Chatting with ChatGPT 作者:Xiang Wei, Xingyu Cui, Ning Cheng, Xiaobin W…

PyTorch使用Tricks:学习率衰减 !!

文章目录 前言 1、指数衰减 2、固定步长衰减 3、多步长衰减 4、余弦退火衰减 5、自适应学习率衰减 6、自定义函数实现学习率调整:不同层不同的学习率 前言 在训练神经网络时,如果学习率过大,优化算法可能会在最优解附近震荡而无法收敛&#x…

算法刷题:长度最小的子数组

长度最小的子数组 .题目链接题目详情算法原理滑动窗口定义指针进窗口判断出窗口 我的答案 . 题目链接 长度最小的子数组 题目详情 算法原理 滑动窗口 这道题,我们采用滑动窗口的思想来解决,具体步骤如图所示 定义指针 如图所示,两个指针都需要从左往右进行遍历,因此初始值…

AIGC实战——能量模型(Energy-Based Model)

AIGC实战——能量模型 0. 前言1. 能量模型1.1 模型原理1.2 MNIST 数据集1.3 能量函数 2. 使用 Langevin 动力学进行采样2.1 随机梯度 Langevin 动力学2.2 实现 Langevin 采样函数 3. 利用对比散度训练小结系列链接 0. 前言 能量模型 (Energy-based Model, EBM) 是一类常见的生…

食物厨艺展示404错误页面模板源码

食物厨艺展示404错误页面模板源码,HTMLCSSJSCSS,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 蓝奏云:https://wfr.lanzout.com/i3uC71oj52ah…

初识数据库:探索数据的世界

初识数据库:探索数据的世界 1. 什么是数据库?2. 数据库的类型2.1 关系型数据库(RDBMS)2.2 非关系型数据库(NoSQL) 3. 为什么使用数据库?4. 如何选择合适的数据库?5. 结语 在信息技术…

ovs和ovn安装

ovn和ovs介绍 ovn架构图 CMS||-----------|-----------| | || OVN/CMS Plugin || | || | || OVN Northbound DB || | || | || ovn-northd || …

设置windows10资源管理器等的边框

Windows10默认状态下,资源管理器、浏览器等没有边框,在打开多个窗口等情况下,想要拖动或选择某个窗口时,不是很好定位到窗口标题栏。 通过:设置(可以通过wini组合键打开设置)---》个性化 ---》…

第十二章[模块]:12.4:标准库:datetime

一,官方文档: 1,文档地址 datetime --- 基本日期和时间类型 — Python 3.12.2 文档源代码: Lib/datetime.py datetime 模块提供了用于操作日期和时间的类。 在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。 感知型…

vue-自定义创建项目(六)

为什么要自定义创建项目? 因为VueCli默认创建的项目不能够满足我们的要求,比如默认的项目中没有帮我们集成路由,vuex,eslink等功能。 默认项目 自定义创建项目 流程: 创建项目命令:vue create custom_dem…

VNCTF 2024 Web方向 WP

Checkin 题目描述:Welcome to VNCTF 2024~ long time no see. 开题,是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述:源自一次现实渗透 开题 当前页面没啥好看的,先爆破密码登录试试。爆破无果…

项目第一次git commit后如何撤销

问题描述: # 1. 新建gitcode目录,然后在目录下 git init# 2. 用idea打开目录后,新建.gitignore文件后 git add .git commit -m "init project"git log# 3. 就出现如下图情况目的:向撤销该次代码提交 # 仅撤销 git com…

电商API接口|大数据关键技术之数据采集发展趋势

在大数据和人工智能时代,数据之于人工智能的重要性不言而喻。今天,让我们一起聊聊数据采集相关的发展趋势。 本文从电商API接口数据采集场景、数据采集系统、数据采集技术方面阐述数据采集的发展趋势。 01 数据采集场景的发展趋势 作为大数据和人工智…

Eclipse 分栏显示同一文件

Eclipse 分栏显示同一文件 1. Window -> EditorReferences 1. Window -> Editor Toggle Split Editor (Horizontal) :取消或设置水平分栏显示 Toggle Split Editor (Vertical) :取消或设置垂直分栏显示 References [1] Yongqiang Cheng, https:/…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱11(附带项目源码)

效果演示 文章目录 效果演示系列目录前言物品堆叠源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

JoySSL免费可续签通配符证书:中小企业网站安全的理想选择

在数字时代,网络安全已成为企业和个人用户不可忽视的重要议题。其中,SSL证书作为保障网站数据传输加密和身份验证的关键工具,对于维护网站的安全性和可信度至关重要。然而,对于许多中小企业来说,高昂的SSL证书费用常常…

网络原理(UDP与TCP篇)

网络原理 协议应用层现成的自定义协议格式运输层端口号UDP协议首部格式TCP报文段的首部格式首部格式源端口号 和 目的端口号序号确认号ack 和 ACK数据偏移(**首部长度**)保留窗口校验和SYNFINRSTPSHURG 和 紧急指针扩展首部填充 TCP的可靠传输TCP的超时重…

函数、极限、连续——刷题(7

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 记住和差化积、积化和差公式即可: 然后就可以化简: 3.总结: 记住和差化积、积化和差公式即可…

Ps:污点修复画笔工具

污点修复画笔工具 Spot Healing Brush Tool专门用于快速清除图像中的小瑕疵、污点、尘埃或其他不想要的小元素。 它通过分析被修复区域周围的内容,无需手动取样,自动选择最佳的修复区域来覆盖和融合这些不完美之处,从而实现无痕修复的效果。 …

7.1 Qt 中输入行与按钮

目录 前言: 技能: 内容: 参考: 前言: line edit 与pushbotton的一点联动 当输入行有内容时,按钮才能使用,并能读出输入行的内容 技能: pushButton->setEnabled(false) 按钮不…