PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍

torchinfo是一个为PyTorch用户量身定做的开源工具,其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程,让模型架构一目了然。通过torchinfosummary函数,用户可以快速获取模型的详细结构和统计信息,如模型的层次结构、输入/输出维度、参数数量、多加操作(Mult-Adds)等关键信息。

2、安装

首先,你需要安装torchinfo库。可以通过pip进行安装:

pip install torchinfo

3、导入

安装完成后,需要在你的Python脚本中导入torchinfo模块:

from torchinfo import summary

4、函数原型定义

torchinfo的summary函数原型定义如下:

def summary(model: nn.Module, input_data: torch.Tensor | tuple[torch.Tensor, ...] | tuple[int, ...] | None = None, batch_dim: int = 0, col_widths: tuple[int, ...] | None = None, col_names: tuple[str, ...] | None = None, device: str | torch.device | None = None, dtypes: tuple[torch.dtype, ...] | None = None, verbose: int = 1, **kwargs)

参数说明

  • model: 要分析的PyTorch模型,必须是torch.nn.Module的实例。
  • input_data: 用于模型前向传播的输入数据。它可以是一个torch.Tensor对象,也可以是一个包含多个输入张量的元组。此外,还可以提供一个表示输入尺寸的元组,例如(batch_size, channels, height, width)。
  • batch_dim: 指定输入张量中哪个维度是批量大小(batch size)。默认为0。
  • col_widths: 指定输出列宽的元组。如果未指定,则自动计算列宽以适应输出。
  • col_names: 指定输出列名的元组。如果未指定,则使用默认列名。
  • device: 指定模型运行的设备(如’cpu’或’cuda’)。如果未指定,则自动选择。
  • dtypes: 指定输入张量的数据类型。如果未指定,则自动推断。
  • verbose: 控制输出信息的详细程度。默认为1,表示输出基本信息。设置为2或更高可以获得更详细的输出。
  • kwargs: 其他关键字参数,可以传递给模型的前向传播函数。

5、使用方法

下面通过几个示例来展示如何使用torchinfo的summary函数。
5.1 使用预定义模型
首先,我们使用PyTorch预定义的模型(如torchvision.models.resnet50)来展示如何使用summary函数。

import torch
import torchvision.models as models
from torchinfo import summary
# 定义模型
model = models.resnet18(pretrained=False)# 使用summary函数打印模型概况
summary(model, input_size=(1, 3, 224, 224))

在这个示例中,我们加载了一个未预训练的ResNet50模型,并使用summary函数打印了模型的概况。input_size参数指定了输入数据的大小,即(batch_size, channels, height, width)。
在这里插入图片描述

5.2 使用自定义模型
接下来,我们定义一个简单的自定义模型,并使用summary函数打印其概况。

import torch
import torch.nn as nn
from torchinfo import summary# 定义一个简单的两层全连接神经网络模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc1 = nn.Linear(100, 50)self.fc2 = nn.Linear(50, 10)self.relu = nn.ReLU()def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return x# 创建模型实例
model = SimpleModel()# 使用summary函数打印模型概况
summary(model, input_size=(100,))

在这个示例中,我们定义了一个简单的两层全连接神经网络模型,并使用summary函数打印了模型的概况。input_size参数指定了输入数据的大小,即(batch_size, features)。由于我们的模型是一个全连接层,所以我们只指定了特征数量。
在这里插入图片描述

5.3 使用自定义输入数据

有时候,可能想要使用实际的输入数据来查看模型的概况。下面是一个示例,展示了如何使用自定义输入数据来调用summary函数。

import torch
import torchvision.models as models
from torchinfo import summary# 定义模型
model = models.resnet50(pretrained=False)# 创建自定义输入数据
input_data = torch.randn(1, 3, 224, 224)  # batch_size=1, channels=3, height=224, width=224# 使用summary函数打印模型概况
summary(model, input_data=input_data)

在这个示例中,我们创建了一个形状为(1, 3, 224, 224)的随机张量作为输入数据,并使用summary函数打印了模型的概况。注意,这里我们使用input_data参数而不是input_size参数来指定输入数据。

5.4 调整输出格式
torchinfo允许通过col_widths和col_names参数来调整输出的格式。下面是一个示例,展示了如何自定义输出列宽和列名。

import torch
import torchvision.models as models
from torchinfo import summary# 定义模型
model = models.resnet50(pretrained=False)# 使用summary函数打印模型概况,并自定义输出列宽和列名
summary(model, input_size=(3, 224, 224), col_widths=(30, 30, 20, 20),col_names=('input_size', 'output_size', 'kernel_size', 'num_params'))

在这个示例中,我们自定义了输出列宽和列名。col_widths参数指定了每列的宽度(以字符为单位),而col_names参数指定了每列的列名。这样,就可以根据需要来调整输出的格式了。

6、小结

torchinfo的summary函数是一个强大的工具,可以方便地查看PyTorch模型的结构和参数数量。通过本文的介绍,应该已经掌握了如何使用summary函数来打印模型的概况。无论使用预定义模型还是自定义模型,无论是使用输入尺寸还是自定义输入数据,torchinfo都能提供详细而清晰的输出信息。希望这篇文章能对你有所帮助!

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

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

相关文章

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路,希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年,年初拿高绩效,但感觉逐渐被公司一点点剥离出中心;年中一直在学习防患于未然&#xff1b…

C++ 类- 构造和析构

空类 class A {};空类大小: sizeof(A) 1编译器会默认生成 6 个成员函数: class A { public:A();//构造函数 - 完成对象初始化工作~A();//析构函数 - 完成对象的资源清理A(const A& a);//拷贝构造函数 - 使用同一类中之前创建的对象来初始化新创建…

集群、分布式及微服务间的区别与联系

目录 单体架构介绍集群和分布式架构集群和分布式集群和分布式区别和联系 微服务架构的引入微服务带来的挑战 总结 单体架构介绍 早期很多创业公司或者传统企业会把业务的所有功能实现都打包在一个项目中,这种方式就称为单体架构 以我们都很熟悉的电商系统为例&…

js实现数据结构

常见的数据结构 数组 创建数组 数组字面量[],new Array().fill() 二维数组,两层循环创建增 头部添加unshift 尾部添加push 任意位置添加 splice(index,0,item)删 头部删除 shift 尾部删除pop 任意位置删除splice(index,num) 栈 先进后出 push,pop 队列 先进先出 push,shi…

数据分析 基础定义

一、大数据的定义 数据分析是基于商业等目的,有目的的进行收集、整理、加工和分析数据,提炼有价值信息的过程。 大数据分析即针对海量的、多样化的数据集合的分析 大数据分析是一种利用大规模数据集进行分析和挖掘知识的方法。随着互联网、社交媒体、移动…

数据库高可用方案-04-删除策略

数据库数据高可用系列 数据库高可用方案-01-数据库备份还原方案 数据库高可用方案-02-多机房部署 数据库高可用方案-03-主备等高可用架构 数据库高可用方案-04-删除策略 数据库高可用方案-05-备份与恢复 数据库高可用方案-06-监控与报警 数据库高可用方案-07-一致性校验…

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题。 安装 rdp 服务: yum install -y epel-release yum install -y xrdp或者如下: 可以通过下载rpm软件包,然后rpm方式安装。访问xrdp官网https…

python正则训练。

在PythonTip,我们总是想要了解我们每天有多受欢迎,并从流行的网站上抓取了对话。 每个对话都占据1行,总共有 N 个这样的对话。每个对话中最多有1个单词说"pythontip"(全部小写)。我们希望你帮助我们确定一个…

OpenAI-Edge-TTS的使用

OpenAI-Edge-TTS的使用相对简单,以下是具体步骤: 一、安装首先,你需要通过Python包管理工具pip来安装Edge-TTS库。在命令行中输入以下命令:【bash】 pip install edge-tts如果想使用edge-tts和edge-playback命令,最好使用pipx。二、基本使用安装完成后,你就可以开始使用E…

Maven多环境打包方法配置

简单记录一下SpringBoot多环境打包配置方法,分部署环境和是否包含lib依赖包两个维度 目录 一、需求说明二、目录结构三、配置方案四、验证示例 一、需求说明 基于Spring Boot框架的项目分开发,测试,生产等编译部署环境(每一个环境…

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章:三层架构和MVC 三层架构: 开发服务器端,一般基于两种形式,一种 C/S 架构程序,一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序,B/S 架构又分成了三层架构三层架构: 表现…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github,搜索github-chinese2.打开项目,打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动,找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…

阳振坤:AI 大模型的基础是数据,AI越发达,数据库价值越大

2024年1月12日,第四届OceanBase数据库大赛决赛在北京圆满落幕。在大赛的颁奖典礼上,OceanBase 首席科学家阳振坤老师为同学们献上了一场主题为“爱上数据库”的公开课,他不仅分享了个人的成长历程,还阐述了对数据库行业现状与未来…

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角,新建工程或者选择“文件”-“新建工程”,选择工程类型“标准工程”选择设备类型和编程语言,并指定工程文件名及保存路径,如下图所示: 选择工程类型为“标准工程” 选择主模块机型; 选择熟悉的编程语言; 填写工程名,选择存放路径; 确定。 编…

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯,如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。 怎么恢复Chrome 之前版本&a…

IO进程----进程

进程 什么是进程 进程和程序的区别 概念: 程序:编译好的可执行文件 存放在磁盘上的指令和数据的有序集合(文件) 程序是静态的,没有任何执行的概念 进程:一个独立的可调度的任务 执行一个程序分配资…

PHP语言的数据库交互

PHP语言的数据库交互 引言 在现代Web开发中,数据库是存储和管理应用数据的重要组成部分。随着互联网的快速发展,网站和应用程序对数据存储和操作的需求变得越来越复杂。PHP作为一种广泛使用的服务器端脚本语言,提供了多种数据库交互的方法&…

npm操作大全:从入门到精通

引言 在现代前端开发中,npm(Node Package Manager)是不可或缺的工具。无论是安装依赖、管理项目,还是发布自己的包,npm都扮演着重要的角色。本文将带你从npm的基础操作开始,逐步深入到高级用法&#xff0c…

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台,广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法,尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…

部署Metricbeat监测ES

官方参考文档 安装Metricbeat curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.17.27-linux-x86_64.tar.gztar xzvf metricbeat-7.17.27-linux-x86_64.tar.gz设置 Metricbeat连接到 Elasticsearch 进入metricbeat目录配置metricbeat.yml …