模型可视化

模型标题可视化

可视化工具: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.variablename =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 dotif _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.hqwc.cn/news/474034.html

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

相关文章

天锐绿盾|防泄密系统|计算机文件数据\资料安全管理软件

“天锐绿盾”似乎是一款专注于防泄密和计算机文件数据/资料安全管理的软件。在信息安全日益受到重视的今天,这样的软件对于保护企业的核心数据资产和防止敏感信息泄露至关重要。 通用地址:www.drhchina.com 防泄密系统的主要功能通常包括: 文…

洛谷 P2404 自然数的拆分问题

参考代码 #include<bits/stdc.h> using namespace std; int n; int a[100009]{1}; void output(int t) { for(int i1;i<t-1;i) cout<<a[i]<<""; cout<<a[t]<<endl; } void dfs(int s,int t) { for(int ia[t-…

知识图谱:py2neo导入周杰伦歌单csv文件

文章目录 py2neo导入csv文件py2neo导入周杰伦歌单csv效果展示 py2neo导入csv文件 之前写的知识图谱指南 知识图谱&#xff1a;py2neo将csv文件导入neo4j 因为没有区分不同实体entity的类型&#xff0c;所以颜色相同&#xff0c;无法相互区分歌手、歌曲还是专辑等等。 py2ne…

「算法」二分查找1:理论细节

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;算法详解 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 二分查找算法简介 这个算法的特点就是&#xff1a;细节多&#xff0c;出错率高&#xff0c;很容易就写成死循环有模板&#xff0c;但…

C++中的拷贝构造函数

一、拷贝构造函数的概念 拷贝构造函数用于创建一个与已有对象相同的对象&#xff0c;本质上也是构造函数的重载 拷贝构造函数只有一个类型为 const 类类型引用的形参&#xff0c;当我们要创建一个与已存在对象相同的对象时&#xff0c;由编译器自动调用拷贝构造函数。 clas…

C++--Linux基础使用

文章目录 几个简单命令开机关机重启查看当前目录切换当前目录列出当前目录下的目录和文件列出指定目录下的目录和文件清屏查看/设置时间 目录和文件目录概要目录详细说明相对路径和绝对路径 上古神器vi创建/打开文件vi 的两种模式vi 的常用命令 用户管理组管理用户管理修改用户…

java 调用智谱ai 大模型的完整步骤(国内的 AI 大模型 对话)

要使用java 调用智谱AI的API进行异步调用&#xff0c;您需要遵循以下步骤&#xff1a; 1. **获取API密钥**&#xff1a; - 您需要从智谱AI平台获取一个API密钥&#xff08;API Key&#xff09;&#xff0c;这个密钥将用于所有API请求的身份验证。 2. **SDK源…

RocketMQ—RocketMQ消费重试和死信消息

RocketMQ—RocketMQ消费重试和死信消息 消费重试 生产者重试 设置重试的代码如下 // 失败的情况重发3次 producer.setRetryTimesWhenSendFailed(3); // 消息在1S内没有发送成功&#xff0c;就会重试 producer.send(msg, 1000);一般情况下&#xff0c;我们不会在生产者方进行…

Spring 事务原理总结六

不知不觉&#xff0c;关于Spring事务的文章已经写了五篇了。老实讲我自己不断质疑过自己&#xff1a;现在写这些文章还有意义吗&#xff1f;当前的市场已经成什么样了&#xff0c;为什么还要固守这落后的技术&#xff1f;但是贝索斯一次接受访谈的回答&#xff0c;让我写下去的…

C++多重继承

C多重继承 C中的多重继承是指一个类可以从多于一个的基类派生出来&#xff0c;这允许在一个派生类中继承多个基类的特性和行为。多重继承增加了C的灵活性和表达能力&#xff0c;但同时也带来了一些复杂性&#xff0c;如菱形继承问题和潜在的命名冲突。 基本用法 定义一个多重…

【Spring篇】 项目加盐加密处理

目录 1. MD5 加密算法 2. 加盐加密流程 3. Spring Security 实现加盐加密 1. 添加 Spring Security 框架 2. 关闭 Spring Security 认证 3.实现加盐加密 1. MD5 加密算法 MD5 是 Message Digest Algorithm 的缩写&#xff0c;译为信息摘要算法&#xff0c;它是 Java …

电梯控制系列之电梯结构介绍

这篇博客介绍单部10层电梯的完整控制程序框架编写过程&#xff0c;编程语言&#xff1a;SCL&#xff0c;控制器型号&#xff1a;S7-1200PLC。本篇博客介绍和电梯控制相关的一些电梯结构介绍。本文只可作为学习参考资料&#xff0c;行业控制需要遵循电梯安全相关规范。 1、电梯…