深度学习模型可视化:Netron的安装和使用

文章目录

  • Netron简介
  • Netron加载模型类型
  • Netron使用方式
  • Netron功能介绍
  • 完整案例
  • 总结

Netron简介

  • Netron是一个支持PyTorch的可视化工具,它的开发者是微软的Lutz Roeder,操作简单快捷,就像保存文件、打开文件一样,简单高效。
  • Netron支持跨平台如Linux、macOS、Window。

Netron加载模型类型

  • Netron支持以下常见格式:​​ONNX​​ (.onnx)、​​TensorFlow​​ (.pb)、​​Keras​​ (.h5)、​​PyTorch​​ (需转化为ONNX格式)。其他支持格式​​:Caffe、CoreML、Darknet 等(完整列表见官方文档)。
  • 模型输入格式要求:torch.onnx.export() 的第一个参数需要是 PyTorch 模型实例(torch.nn.Module),而不是模型文件(如.pth.dict)。如果您的模型保存在 .pth 或 .dict 文件中,需要先通过 torch.load() 加载参数,并赋值到模型结构中
model = YourModelClass()  # 先实例化模型结构
state_dict = torch.load('model.pth')  # 加载参数文件
model.load_state_dict(state_dict)  # 加载参数到模型
  • 支持的模型参数文件格式:
  • .pth 文件:通常是 PyTorch 的 state_dict(参数字典)或完整模型(包含结构和参数)。如果是 state_dict,需配合模型结构使用。
  • .dict 文件:可能是用户自定义的扩展名,实际内容应为 PyTorch 支持的序列化格式(与 .pth 类似),需通过torch.load() 加载。
torch.save(model.state_dict(), 'model.pth')  # 保存参数
torch.save(model, 'full_model.pth')         # 保存完整模型(结构+参数)

  • Netron需要onnx文件格式,ONNX 导出注意事项:对于 torch.onnx.export() 来说,原模型文件本身不需要特定格式,因为输入参数 model 必须是一个已经加载到内存中的 PyTorch 模型(nn.Module 实例)。

  • 输入张量torch.randn(1, 3, 640, 640) 是示例输入,需与模型实际输入尺寸一致(YOLOv5 的默认输入为 [batch, 3, height, width])。
  • 动态维度:若需支持动态 batch 或尺寸,可通过 dynamic_axes 参数指定:
    torch.onnx.export(model,torch.randn(1, 3, 640, 640),'model.onnx',dynamic_axes={'input': {0: 'batch'}, 'output': {0: 'batch'}}
    )
    

  • 例如:通过torch.onnx.export()生成.onnx文件,再通过netron.start()打开.onnx文件
import torch
from torchvision.models import AlexNet
import netronmodel = AlexNet()input = torch.ones((1,3,224,224))torch.onnx.export(model, input, f='AlexNet.onnx')   #导出 .onnx 文件
netron.start('AlexNet.onnx') #展示结构图
  • 默认会启动http://localhost:8080/网页,可以
    在这里插入图片描述

Netron使用方式

  1. 在线使用:可以先将文件转化为.onnx格式,再通过访问在线netron上传模型进行使用。
  2. 安装客户端本地使用:访问netron releases,下载安装包进行使用
  3. python环境中安装使用:激活anaconda环境执行pip install netron

Netron功能介绍

  1. Netron层次化展示模型结构,可以查看的具体信息包括,该层的名称,所属模块,参数属性、输入的参数和输出的参数。
    在这里插入图片描述
  2. 左侧可以到处图片,展示展示或隐藏相关参数信息。也可以将模型结构横向展示。
    在这里插入图片描述
    在这里插入图片描述

完整案例

pip list
#%%
import math
import netron
import torch.onnx
import torch.nn as nn
from torch.autograd import Variabledefault_cfg = {11 : [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512],13 : [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512],16 : [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512],19 : [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512],}class vgg(nn.Module):def __init__(self, dataset='cifar10', depth=19, init_weights=True, cfg=None):super(vgg, self).__init__()if cfg is None:cfg = default_cfg[depth]self.feature = self.make_layers(cfg, True)if dataset == 'cifar10':num_classes = 10elif dataset == 'cifar100':num_classes = 100self.classifier = nn.Linear(cfg[-1], num_classes)if init_weights:self._initialize_weights()def make_layers(self, cfg, batch_norm=False):layers = []in_channels = 3for v in cfg:if v == 'M':layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else:conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1, bias=False)if batch_norm:layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]else:layers += [conv2d, nn.ReLU(inplace=True)]in_channels = vreturn nn.Sequential(*layers)def forward(self, x):x = self.feature(x)x = nn.AvgPool2d(2)(x)x = x.view(x.size(0), -1)y = self.classifier(x)return ydef _initialize_weights(self):for m in self.modules():if isinstance(m, nn.Conv2d):n = m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))if m.bias is not None:m.bias.data.zero_()elif isinstance(m, nn.BatchNorm2d):m.weight.data.fill_(0.5)m.bias.data.zero_()elif isinstance(m, nn.Linear):m.weight.data.normal_(0, 0.01)m.bias.data.zero_()if __name__ == '__main__':net = vgg()x = Variable(torch.FloatTensor(16, 3, 40, 40))y = net(x)print(y.data.shape)onnx_path = "onnx_model_name.onnx"torch.onnx.export(net, x, onnx_path)netron.start(onnx_path)

在这里插入图片描述

总结

  • 模型文件本身不需要特定格式,但需通过 PyTorch 正确加载为 nn.Module 实例。
  • .pth.dict 文件需配合模型结构代码使用(除非保存的是完整模型)。
  • ONNX 导出要求模型实例和示例输入张量的形状匹配。

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

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

相关文章

pytorch LSTM 结构详解

最近项目用到了LSTM ,但是对LSTM 的输入输出不是很理解,对此,我详细查找了lstm 的资料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…

AUTOSAR AP 入门0:AUTOSAR_EXP_PlatformDesign.pdf

AUTOSAR AP官网:AUTOSAR Adaptive Platform设计AUTOSAR AP的目的,翻译版官方文档 AUTOSAR_EXP_PlatformDesign.pdf : https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …

零碳办会新范式!第十届国际贸易发展论坛——生物能源和可持续发展专场,在京举办

2025年5月16日,第十届国际贸易发展论坛在北京国际饭店盛大启幕。本届论坛由北京绿林认证有限公司主办。作为汇聚行业智慧、引领发展方向的盛会,国际贸易发展论坛每两年一届,本次会议是第十届,至今已走过近20年光辉历程。多年来&am…

ECharts图表工厂,完整代码+思路逻辑

Echart工厂支持柱状图(bar)折线图(line)散点图(scatter)饼图(pie)雷达图(radar)极坐标柱状图(polarBar)和极坐标折线图(po…

如何制作令人印象深刻的UI设计?

1. 规划用户旅程 规划用户旅程是创建高效且吸引人的UI设计的第一步。设计师需要深入了解目标用户群体的需求和行为模式,这通常涉及用户调研、创建用户角色(Personas)和绘制用户旅程图(User Journey Maps)。通过这种方…

k8s 离线安装 kube-prometheus-stack

配置共享存储 Prometheus 需要配置持久化存储,防止数据丢失 服务端 服务端安装 NFS 服务 sudo apt install nfs-kernel-server 创建共享目录,在服务器端创建 /nfs 目录。 mkdir /nfs chmod -R 777 /nfs # 设置文件权限 nfs目录下只给了默认权限&#xff…

ceph osd 磁盘分区对齐

分区对齐可以提高读写速度的原理是什么 分区对齐可以提高磁盘读写速度的原理主要在于 磁盘的物理扇区大小与操作系统发起的读写请求之间是否对齐。如果不对齐,每次读写操作可能会跨越多个物理扇区,造成额外的 I/O 操作,从而降低性能。 🔧 原理详解 1. 物理扇区(Physica…

Simon J.D. Prince《Understanding Deep Learning》

学习神经网络和深度学习推荐这本书,这本书站位非常高,且很多问题都深入剖析了,甩其他同类书籍几条街。 多数书,不深度分析、没有知识体系,知识点零散、章节之间孤立。还有一些人Tian所谓的权威,醒醒吧。 …

【泛微系统】后端开发Action常用方法

后端开发Action常用方法 代码实例经验分享:代码实例 经验分享: 本文分享了后端开发中处理工作流Action的常用方法,主要包含以下内容:1) 获取工作流基础信息,如流程ID、节点ID、表单ID等;2) 操作请求信息,包括请求紧急程度、操作类型、用户信息等;3) 表单数据处理,展示…

SSH的screen方法

创建一个screen窗口,(在需要运行程序的文件夹内)使用 screen -S name 命令,其中 name 是窗口的名字。 在窗口中执行需要的命令。 当需要临时离开时,使用快捷键 ctrlA D 回来时,使用 screen -r name 恢复…

无法访问org.springframework.boot.SpringApplication

无法访问org.springframework.boot.SpringApplication 检查springboot和jdk的版本是否适配检查jdk的设置是否统一 主要检查下面几处地方

洛谷 P1800 software(DP+二分)【提高+/省选−】

题目链接 https://www.luogu.com.cn/problem/P1800 思路 对于大于等于最优解的天数,一定能使公司交付软件。对于小于最优解的天数,一定无法使公司交付软件。所以考虑二分答案 x x x。 定义 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i个人做了 j j j…

C++性能测试工具——sysprof的使用

一、sysprof sysprof相对于前面的一些性能测试工具来说,要简单不少。特别是其图形界面的操作,非常容易上手,它还支持分析文件的保存和导入功能,这是一个非常不错的功能。做为一款系统性能测试工具,它支持多种硬件平台…

redis数据持久化和配置-15(备份和还原 Redis 数据)

备份和还原 Redis 数据 备份和恢复数据是管理任何数据库系统(包括 Redis)的关键方面。数据丢失可能是由于硬件故障、软件错误、意外删除甚至恶意攻击而发生的。因此,拥有强大的备份和恢复策略对于确保数据持久性和业务连续性至关重要。本课将…

【上位机——WPF】布局控件

布局控件 常用布局控件Panel基类Grid(网格)UniformGrid(均匀分布)StackPanel(堆积面板)WrapPanel(换行面板)DockerPanel(停靠面板)Canvas(画布布局)Border(边框)GridSplitter(分割窗口)常用布局控件 Grid:网格,根据自定义行和列来设置控件的布局StackPanel:栈式面板,包含的…

打卡Day33

简单的神经网络 数据的准备 # 仍然用4特征,3分类的鸢尾花数据集作为我们今天的数据集 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as np# 加载鸢尾花数据集 iris load_iris() X iris.data # …

python开发环境管理和包管理

在 Python 开发中,环境管理 和 包管理 是两个非常重要的概念。它们帮助开发者: 这里写目录标题 一、什么是 Python 环境管理?二、什么是 Python 包管理?三、常见文件说明(用于包管理和环境配置)四、典型流程…

Mybatis面向接口编程

添加与Mapper接口的映射 <!--UserMapper.xml--> <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> …

GMP模型入门

go的并发实现采用的是M:N的线程模型&#xff0c;落地就是gmp模型。 M:N模型如下图&#xff1a; gmp模型如下图&#xff1a; --- Go 的 GMP 模型是其 高效并发调度机制的核心。GMP 代表&#xff1a; G&#xff1a;Goroutine&#xff08;用户态线程&#xff09; M&#xff1a;…

达梦数据库-报错-01-[-3205]:全文索引词库加载出错

目录 一、环境信息 二、说点什么 三、模拟实验 1、前台启动数据库 2、重建全文索引报错 3、日志信息 4、查找SYSWORD.UTF8.LIB 5、想一想加做一做 6、重启数据库 7、重建全文索引 8、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentO…