深度学习根据代码可视化模型结构图的方法

方法1. Netron

Netron 是一个支持多种深度学习模型格式的可视化工具,可以将 PyTorch 模型转换为 ONNX 格式,然后使用 Netron 进行可视化。

安装 Netron

pip install netron

使用示例

import torch.onnx# 定义模型
model = EMA(channels=64)
x = torch.randn(1, 64, 128, 128)# 导出为 ONNX 格式
torch.onnx.export(model, x, "ema_model.onnx")# 启动 Netron
import netron
netron.start('ema_model.onnx')

在浏览器中打开 http://localhost:8080/ 即可查看模型的结构图。

方法2. tensorboard

TensorBoard 是 TensorFlow 的可视化工具,也可以与 PyTorch 集成,适用于查看模型的计算图和训练过程。

安装 TensorBoard

pip install tensorboard

使用示例

import torch
from torch.utils.tensorboard import SummaryWriter# 定义模型
class EMA(nn.Module):def __init__(self, channels, c2=None, factor=32):super(EMA, self).__init__()self.groups = factorassert channels // self.groups > 0self.softmax = nn.Softmax(-1)self.agp = nn.AdaptiveAvgPool2d((1, 1))self.pool_h = nn.AdaptiveAvgPool2d((None, 1))self.pool_w = nn.AdaptiveAvgPool2d((1, None))self.gn = nn.GroupNorm(channels // self.groups, channels // self.groups)self.conv1x1 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=1, stride=1, padding=0)self.conv3x3 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=3, stride=1, padding=1)def forward(self, x):b, c, h, w = x.size()group_x = x.reshape(b * self.groups, -1, h, w)  # b*g,c//g,h,wx_h = self.pool_h(group_x)x_w = self.pool_w(group_x).permute(0, 1, 3, 2)hw = self.conv1x1(torch.cat([x_h, x_w], dim=2))x_h, x_w = torch.split(hw, [h, w], dim=2)x1 = self.gn(group_x * x_h.sigmoid() * x_w.permute(0, 1, 3, 2).sigmoid())x2 = self.conv3x3(group_x)x11 = self.softmax(self.agp(x1).reshape(b * self.groups, -1, 1).permute(0, 2, 1))x12 = x2.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hwx21 = self.softmax(self.agp(x2).reshape(b * self.groups, -1, 1).permute(0, 2, 1))x22 = x1.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hwweights = (torch.matmul(x11, x12) + torch.matmul(x21, x22)).reshape(b * self.groups, 1, h, w)return (group_x * weights.sigmoid()).reshape(b, c, h, w)# 创建一个SummaryWriter对象
writer = SummaryWriter('runs/ema_example')# 创建模型和输入数据
model = EMA(channels=64)
x = torch.randn(1, 64, 128, 128)# 添加计算图到TensorBoard
writer.add_graph(model, x)
writer.close()

然后使用以下命令启动 TensorBoard 并查看模型的计算图:

tensorboard --logdir=runs/ema_example

在浏览器中打开 http://localhost:6006/ 即可查看模型的结构图。

方法3. Torchviz

Torchviz 是一个可以将 PyTorch 模型的计算图转换为可视化结构图的工具。

需要先安装 graphviz

sudo apt-get update
sudo apt-get install graphviz

安装 Torchviz

pip install torchviz

使用示例

import torch
from torchviz import make_dot# 定义模型
class EMA(nn.Module):def __init__(self, channels, c2=None, factor=32):super(EMA, self).__init__()self.groups = factorassert channels // self.groups > 0self.softmax = nn.Softmax(-1)self.agp = nn.AdaptiveAvgPool2d((1, 1))self.pool_h = nn.AdaptiveAvgPool2d((None, 1))self.pool_w = nn.AdaptiveAvgPool2d((1, None))self.gn = nn.GroupNorm(channels // self.groups, channels // self.groups)self.conv1x1 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=1, stride=1, padding=0)self.conv3x3 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=3, stride=1, padding=1)def forward(self, x):b, c, h, w = x.size()group_x = x.reshape(b * self.groups, -1, h, w)  # b*g,c//g,h,wx_h = self.pool_h(group_x)x_w = self.pool_w(group_x).permute(0, 1, 3, 2)hw = self.conv1x1(torch.cat([x_h, x_w], dim=2))x_h, x_w = torch.split(hw, [h, w], dim=2)x1 = self.gn(group_x * x_h.sigmoid() * x_w.permute(0, 1, 3, 2).sigmoid())x2 = self.conv3x3(group_x)x11 = self.softmax(self.agp(x1).reshape(b * self.groups, -1, 1).permute(0, 2, 1))x12 = x2.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hwx21 = self.softmax(self.agp(x2).reshape(b * self.groups, -1, 1).permute(0, 2, 1))x22 = x1.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hwweights = (torch.matmul(x11, x12) + torch.matmul(x21, x22)).reshape(b * self.groups, 1, h, w)return (group_x * weights.sigmoid()).reshape(b, c, h, w)# 创建模型和输入数据
model = EMA(channels=64)
x = torch.randn(1, 64, 128, 128)# 生成计算图
y = model(x)
dot = make_dot(y, params=dict(model.named_parameters()))# 保存计算图为文件
dot.format = 'png'
dot.render('ema_model')

执行上面这个代码之后,然后会在当前目录下生成一个 png 文件和另一个文件

在这里插入图片描述

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

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

相关文章

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

MYSQL调优详解:案例解析(第40天)

系列文章目录 一、数据库设计优化 二、查询优化 三、架构优化 四、其他优化策略 五、优化案例解析 文章目录 系列文章目录前言一、数据库设计优化二、查询优化三、架构优化四、其他优化策略五、优化案例解析案例一:优化SELECT查询案例二:使用索引案例三…

【TAROT学习日记】韦特体系塔罗牌学习(3)——女祭司 THE HIGH PRIESTESS II

韦特体系塔罗牌学习(3)——女祭司 THE HIGH PRIESTESS II 目录 韦特体系塔罗牌学习(3)——女祭司 THE HIGH PRIESTESS II牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位…

赛氪网贡献突出受表彰,中国计算机应用大会颁奖盛典

2024年7月17日,第39届中国计算机应用大会(CCF NCCA 2024)在万众瞩目中隆重举行,期间举办了盛大的颁奖典礼。此次颁奖典礼对中国计算机应用技术大赛的各大赛道进行了表彰,其中包括“CCF CAT全国算法精英大赛”“全国智能…

node-red学习

Node-RED : 起步 1、安装nodejs Node.js — 在任何地方运行 JavaScript 验证 2、更换下载源 // 查看当前下载地址 npm config get registry // 设置淘宝镜像的地址 npm config set registry https://registry.npmmirror.com/ // 查看当前的下载地址 npm config get registry…

CSS-1_0 CSS和文档流

文章目录 CSS和文档流如何证明这个流的存在呢?流和display番外:inline-block 碎碎念 CSS和文档流 首先什么叫流呢? 通常来说,我们最终看到的网页是HTML文档中定义的各个元素挨个输出的结果,这种一个接一个输出的方式…

前端:Vue学习-2

前端:Vue学习-2 1. vue的生命周期2. 工程化开发和脚手架Vue CLI2.1 组件化开发2.2 scoped解决样式冲突2.3 data是一个函数2.4 组件通信2.5 非父子通信- event bus事件,provide&inject 3.v-model原理->实现父子组件双向绑定4. sync 修饰符->实现…

PyTorch垃圾分类任务与垃圾图片数据集

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 人工智能用于垃圾分类 人工智能用于垃圾分类,业界早有过相关的讨论,主要有三种方案:第一种方案,把垃圾的相关信息制成表格化数据,然后用传统的机器学习方法实现分…

服务客户,保证质量:腾讯云产品的质量实践

分享主题是“服务客户,保证质量”。自从20年开始,我们把质量提升到了一个前所未有的高度。为什么会如此重视质量呢?在竞争激烈和复杂的市场环境中,产品质量对于企业的重要性不言而喻。一旦出现了质量事故,对客户和企业…

PublicCMS:企业级的Java CMS系统

PublicCMS:企业级的Java CMS系统 在当今互联网飞速发展的时代,PublicCMS作为一款功能强大的开源Java CMS系统,为用户提供了全面的建站解决方案。本文将介绍PublicCMS的基本信息、特点以及如何快速部署和使用。 软件简介 PublicCMS是一款现代…

Visual Studio 2022美化

说明: VS版本:Visual Studio Community 2022 背景美化 【扩展】【管理扩展】搜索“ClaudiaIDE”,【下载】,安装完扩展要重启VS 在wallhaven下载壁纸图片作为文本编辑器区域背景图片 【工具】【选项】搜索ClaudiaIDE&#xff…

如何判断c盘d盘e盘哪个是固态硬盘

怎么区分电脑里面的C盘、D 盘、E盘是机械硬盘还是固态硬盘?在电脑里,硬盘是存储数据的核心部件,负责存储操作系统、软件以及用户数据。硬盘的性能也会影响电脑的流畅度。平时我们最常使用的硬盘分为机械硬盘和固态硬盘。在日常使用中&#xf…

Python酷库之旅-第三方库Pandas(032)

目录 一、用法精讲 91、pandas.Series.set_flags方法 91-1、语法 91-2、参数 91-3、功能 91-4、返回值 91-5、说明 91-6、用法 91-6-1、数据准备 91-6-2、代码示例 91-6-3、结果输出 92、pandas.Series.astype方法 92-1、语法 92-2、参数 92-3、功能 92-4、返回…

​1:1公有云能力整体输出,腾讯云“七剑”下云端

【全球云观察 | 科技热点关注】 曾几何时,云计算技术的兴起,为千行万业的数字化创新带来了诸多新机遇,同时也催生了新产业新业态新模式,激发出高质量发展的科技新动能。很显然,如今的云创新已成为高质量发…

液氮罐搬运过程中的安全注意事项有哪些

在液氮罐搬运过程中,安全性是至关重要的考虑因素。液氮是一种极低温的液体,其温度可达零下196摄氏度,在接触到人体或物体时会迅速引发严重的冷冻伤害。因此,正确的搬运和使用液氮罐是保障操作安全的关键。 液氮是一种无色、无味的…

RK3568笔记四十:设备树

若该文为原创文章,转载请注明原文出处。 一、介绍 设备树 (Device Tree) 的作用就是描述一个硬件平台的硬件资源,一般描述那些不能动态探测到的设备,可以被动态探测到的设备是不需要描述。 设备树可以被 bootloader(uboot) 传递到内核&#x…

分布式服务框架zookeeper+消息队列kafaka

一、zookeeper概述 zookeeper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务,状态同步,配置中心,集群管理等。 在分布式环境下,经常需要对应用/服…

项目的一些操作

一、发送qq邮箱验证码以及倒计时 要发送验证码需要用到邮箱的授权码&#xff1a; qq邮箱获取方式&#xff0c;打开qq邮箱点设置找到如下界面&#xff1a; 然后获取授权码&#xff1b; 导入依赖 <dependency><groupId>com.sun.mail</groupId><artifactId&…

LeetCode 算法:单词搜索 c++

原题链接&#x1f517;&#xff1a;单词搜索 难度&#xff1a;中等⭐️⭐️ 题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通…

详解MLOps,从Jupyter开发到生产部署

大家好&#xff0c;Jupyter notebook 是机器学习的便捷工具&#xff0c;但在应用部署方面存在局限。为了提升其可扩展性和稳定性&#xff0c;需结合DevOps和MLOps技术。通过自动化的持续集成和持续交付流程&#xff0c;可将AI应用高效部署至HuggingFace平台。 本文将介绍MLOps…