模型可视化

模型标题可视化

可视化工具: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

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

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

相关文章

Oracle 基础入门指南

一、什么是Oracle? Oracle是一款由美国Oracle公司开发的关系型数据库管理系统。它支持SQL查询语言,并提供了丰富的功能和工具,用于管理大规模数据存储、处理和访问。Oracle被广泛应用于企业级应用中,包括金融、电信、零售等各行各…

阿里云服务器部署配置选择全攻略

阿里云服务器配置怎么选择?根据实际使用场景选择,个人搭建网站可选2核2G配置,访问量大的话可以选择2核4G配置,企业部署Java、Python等开发环境可以选择2核8G配置,企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

测试用例执行计划 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 某个产品当前迭代周期内有N个特性(F1, F2, ..., FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其…

Python六级考试笔记

Python六级考试笔记【源源老师】 六级标准 一、 掌握文件操作及数据格式化。 二、 掌握数据可视化操作。 三、 理解类与对象的概念,初步掌握类与对象的使用。 四、 掌握SQLite数据库基础编程。 五、 掌握简单的使用tkinter的GUI设计。 ​ 1. 文件操作 &#xff0…

海外网红营销指南:打造情感共鸣的6大策略解析

随着全球互联网的发展,海外网红营销已经成为品牌推广的一种重要方式。然而,在竞争激烈的市场中,要让品牌在海外市场脱颖而出,仅仅依靠产品本身的特点和广告的宣传已经不再足够。情感共鸣,作为一种更为深刻、更为有力的…

春节专题|产业7问:区块链厂商的现在和未来——数字资产厂商

2023转瞬即逝,不同于加密领域沉寂一整年后在年末集中爆发,对于我国的区块链厂商而言,稳中求胜才是关键词,在平稳发展的基调下,产业洗牌也悄无声息的到来。 从产业总体而言,在经过了接近3年的快速发展后&…

『运维备忘录』之 CMD 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

C高级D5作业

1.#!/bin/bash read -p "请输入一个字符>>" -n 1 c echo case $c in [[:lower:]]) echo "小写" ;; [[:upper:]]) echo "大写" ;; [1-9]) echo "数字" ;; …

使用Python生成二维码的完整指南

无边落木萧萧下,不如跟着可莉一起游~ 可莉将这篇博客收录在了:《Python》 可莉推荐的优质博主首页:Kevin ’ s blog 本文将介绍如何使用Python中的qrcode库来生成二维码。通过简单的代码示例和详细解释,读者将学习如何在Python中轻…

第五次作业:LMDeploy 的量化和部署

参考文档:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 基础作业: 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图) …

Leetcode-589. N 叉树的前序遍历

题目: 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 示例 1: 输入:root [1,null,3,2,4,…

【机器学习】机器学习常见算法详解第4篇:KNN算法计算过程(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用&#xff0…

Checklist系列:JVM自检四十问,万字整理,推荐收藏

基础 请简单的介绍一下jvm? JVM 全称:Java Virtual Machine(Java虚拟机)简介:JVM是一种虚拟机,它使计算机能够运行Java程序以及用其他语言编写并编译为Java字节码的程序。Java的设计理念之一是"一次编…

桌面文件删除了怎么恢复?恢复文件,3个小秘诀!

在日常使用电脑的过程中,很多用户会习惯性的将文件保存在电脑桌面上。因此不可避免会出现桌面文件丢失的情况。这或许会对我们的工作和学习造成影响。 桌面文件删除了怎么恢复?如果你还没有掌握正确的恢复方法。记得继续往下看,下文有实用的…

C语言—数组一维(含冒泡排序)

1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b; /*1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b;*/#include <stdio.h>int main(void) {int nums[…

C图书信息管理系统 代码+报告

C图书信息管理系统 背景&#xff1a; 在当今信息时代&#xff0c;图书信息管理系统成为图书馆和书店等组织中不可或缺的一部分。随着图书数量的增加和信息化水平的提高&#xff0c;传统的手工管理方式已经无法满足快速、高效、精确的信息管理需求。因此&#xff0c;设计和实现一…

【STM32 物联网】AT指令的介绍

文章目录 前言一、什么是AT指令二、使用AT指令需要注意什么 三、AT指令的分类和提示信息3.1 AT指令的分类3.2 是否保存到Flash的含义3.3 提示信息 总结 前言 本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网&#xff08;IoT&#xff09;应用中&#xff0c;通信模…

为何 Serverless 革命停滞不前(译)

原文&#xff1a;Bernard Brode - 2020.10.12 主要观点 近几年来&#xff0c;有人预测 Serverless 计算将带来一种全新的计算时代&#xff0c;这种时代的应用程序无需操作系统即可运行。我们被告知这种框架将解决许多可扩展性问题。然而&#xff0c;现实并非如此。尽管许多人…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…

Sora爆火,普通人的10个赚钱机会

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…