统计神经网络参数量、MAC、FLOPs等信息
0、基础提示
1、FLOPS是用来衡量硬件算力的指标,FLOPs用来衡量模型复杂度。
2、MAC 一般为 FLOPs的2倍
3、并非FLOPs越小在硬件上就一定运行更快,还与模型占用的内存,带宽,等有关
1、FLOPs计算
神经网络参数量。用于衡量模型大小。一般卷积计算方式为:
F L O P s = 2 ∗ H W ( K h ∗ K w ∗ C i n + 1 ) C o u t FLOPs = 2*HW(Kh*Kw*Cin+1)Cout FLOPs=2∗HW(Kh∗Kw∗Cin+1)Cout
其中,
H,W表示该层卷积的高和宽
Kh,Kw表示卷积核的高和宽
2 表示一次乘操作 + 一次加操作
+1 表示bias操作
2、统计工具-THOP
源代码链接
2.1 安装
pip install thop
或
pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git
2.2 基础使用
from torchvision.models import resnet50
from thop import profile
model = resnet50()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))
2.3 定义自己的规则
class YourModule(nn.Module):# your definitiondef count_your_model(model, x, y):# your rule hereinput = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ), custom_ops={YourModule: count_your_model})
2.4 模型包含多个输入
修改input就好
from torchvision.models import resnet50
from thop import profile
model = resnet50()
input1 = input2 = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input1, input2,))
3、 统计工具-torchstat
这个是我更中意的,因为他统计信息更加丰富,包含params,memory, Madd, FLOPs等。缺点在于已经不更新了,且不支持多输入,好在我们可以修改代码支持。
源代码链接
3.1 安装
pip install torchstat
3.2 基础使用
from torchstat import stat
import torchvision.models as models
model = models.resnet18()
stat(model, (3, 224, 224))
3.3 输入多个Input
将torchstat 库安装目录下的 torchstat/statistics.py 中按如下修改:
class ModelStat(object):def __init__(self, model, input_size, query_granularity=1):assert isinstance(model, nn.Module)# 删除输入长度为3的限制# assert isinstance(input_size, (tuple, list)) and len(input_size) == 3assert isinstance(input_size, (tuple, list))self._model = modelself._input_size = input_sizeself._query_granularity = query_granularity
将torchstat 库安装目录下的 torchstat/model_hook.py 中按如下修改:
class ModelHook(object):def __init__(self, model, input_size):assert isinstance(model, nn.Module)assert isinstance(input_size, (list, tuple))self._model = model# 原始是通过单个输入的尺寸,再构建输入tensor,我们可以修改为在网络外构建输入tensor后直接送入网络# self._input_size = input_sizeself._origin_call = dict() # sub module call hookself._hook_model()# x = torch.rand(1, *self._input_size) # add module duration timeself._model.eval()# self._model(x)self._model(*self._input_size)
使用时候测试代码
from torchstat import stat
import torchvision.models as models
model = models.resnet18()
input1, input2 = torch.rand(1, 3, 224, 224), torch.rand(1, 3, 224, 224)
stat(model, (input1, input2))
大致改动就是这样了,还有什么bug可以自己稍微修改一下哈。另外找修改地方可以看报错提示torchstat安装路径修改。
4、fvcore
stat有个很麻烦的问题是,他不支持transformer,因此包含transformer的网络可以使用fvcore,他是Facebook开源的一个轻量级的核心库。
4.1、 安装
pip install fvcore
4.2、 基础使用
from fvcore.nn import FlopCountAnalysis, parameter_count_table
# 创建网络
model = MobileViTBlock(in_channels=32, transformer_dim=64, ffn_dim=256)# 创建输入网络的tensor
tensor = (torch.rand(1, 32, 64, 64),)# 分析FLOPs
flops = FlopCountAnalysis(model, tensor)
print("FLOPs: ", flops.total())# 分析parameters
print(parameter_count_table(model))
参考来自:https://zhuanlan.zhihu.com/p/583106030
欢迎交流补充
相关文章:
统计神经网络参数量、MAC、FLOPs等信息
0、基础提示 1、FLOPS是用来衡量硬件算力的指标,FLOPs用来衡量模型复杂度。 2、MAC 一般为 FLOPs的2倍 3、并非FLOPs越小在硬件上就一定运行更快,还与模型占用的内存,带宽,等有关 1、FLOPs计算 神经网络参数量。用于衡量模型大…...
【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)
文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文:Aligning Bag of Regions for Open-Vocabulary Object Detection 代码:https://github.com/wusize/ovdet…...
Ansible 自动化运维
目录 ansible 环境安装部署ansible 命令行模块inventory 主机清单 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可…...
指纹浏览器能为TikTok运营提供哪些便利?
TikTok是一个非常垂直的平台,每个账号的内容都应尽可能保持垂直,这样平台才会给予更多的流量。有运营经验的TikTok用户一般会经营多个账号,从而获取更多的收益。指纹浏览器作为一种新型浏览器,它的优势不可否认。那么指纹浏览器能…...
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术
编者按:传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点,而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么?它的方案的设计思路是什么?今天,浪潮信息驱动工程师刘伟带…...
【Boost搜索引擎项目】
文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作,在内存中…...
JVM入门篇-JVM的概念与学习路线
JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…...
“程序员求职攻略:IT技术岗面试的必备技巧“
文章目录 每日一句正能量前言分享面试IT公司的小技巧IT技术面试有哪些常见的问题?分享总结遇到过的面试题后记 每日一句正能量 人活一世,不在乎朋友多少,不问财富几车,关键看在你最困难的时候,是否有一个伸出援手的人&…...
回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测
回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…...
方法的定义和格式
方法 什么是方法? 方法是程序中最小的执行单元 定义:把一些代码打包在一起,该过程称为方法 实际开发过程中,什么时候用到方法: 重复的代码,具有独立功能的代码可以抽取到方法中 实际开发中,方…...
【Linux】进程篇(补):简易 shell 的实现(进程深刻理解、内建命令的使用)
文章目录 makefilemybash.c 代码逻辑框架(重要的是,边写边查!) 命令行提示符,fflush 刷新显示获取 输入的 有效字符串,定义一个字符数组,用 fgets 从键盘上获取(注意处理命令行输入…...
django Ajax--前后端数据交互
一.Django的Ajax和JavaScript的Ajax Django的Ajax和JavaScript的Ajax实质上是指同一种技术,即异步JavaScript和XML(Asynchronous JavaScript and XML)。它允许在不刷新整个页面的情况下,通过前后端之间的异步交互来获取或发送数据…...
【嵌入式学习笔记】嵌入式入门1——GPIO
1.什么是GPIO General Purpose Input Output,即通用输入输出端口,简称GPIO,作用是负责采集外部器件的信息或者控制外部器件工作,即输入输出。 2.STM32 GPIO简介 2.1.GPIO特点 不同型号,IO口数量可能不一样&#x…...
[SQL挖掘机] - 多表连接: union
介绍: sql中的union是用于合并两个或多个select语句的结果集的操作符。它将多个查询的结果合并成一个结果集,并自动去除重复的行。请注意,union操作要求被合并的查询返回相同数量和类型的列。 用法: union的基本语法如下: select_stateme…...
AI面试官:SQL Server数据库(三)
AI面试官:SQL Server数据库(三) 当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 文章目录 AI面试官:SQL Server数据库(三)31. 数据库并发控制是什么?数据库有哪些常见的并发控制机制?32. 什…...
python刑事案卷图片转pdf
分两步,第一步是转图片,第二步是合并。 # -*- coding: utf-8 -*- import glob,os from PIL import Imagedef convert_to_pdf(path):# 打开图片文件img Image.open(path)# 将图片转换为 PDF,并保存到同名文件pdf_path os.path.splitext(path…...
vue使用driver.js完成页面引导的功能
需求:给客户做一个页面引导,教客户怎么做 效果: driverjs官方文档 一.安装driver.js # Using npm npm install driver.js# Using pnpm pnpm install driver.js# Using yarn yarn add driver.js 二.在自己需要引导的页面上引入driver.js i…...
学习中遇到的好博客
c日志工具之——log4cpp ECU唤醒的本质就是给ECU供电。 小文件:零拷贝技术 传输大文件:异步 IO 、直接 IO:如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…...
在CSDN学Golang云原生(Kubernetes集群安全)
一,ABAC授权模式 Kubernetes ABAC(Attribute-Based Access Control)授权模式是一种基于属性的访问控制模型,它可以根据用户或组的属性决定是否允许他们访问 Kubernetes 集群中的资源。 在使用 ABAC 授权模式时,管理员…...
浅谈深度神经网络
Deep neural networks are completely flexible by design, and there really are no fixed rules when it comes to model architecture. -- David Foster 前言 神经网络 (neural network) 受到人脑的启发,可模仿生物神经元相互传递信号。神经网络就是由神经元组成…...
Ollama迁移到vLLM:本地大模型服务生产化实战指南
1. 项目概述:为什么一个本地大模型服务迁移指南值得写满5000字?“From Local to Production: The Ultimate Ollama to vLLM Migration Guide”——这个标题里藏着三重现实张力:本地开发的便利性、生产环境的严苛性,以及大模型推理…...
CyberChef:浏览器中的数据安全处理实践
CyberChef:浏览器中的数据安全处理实践 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef CyberChef是一款基于浏…...
安卓悬浮看图神器 置顶悬浮,随时查看更便捷
手机修图。对着原图比对。疯狂切换后台。记个账号密码。来回切应用。手指头都快戳出老茧。看小说找配图。切屏像在玩杂技。急需一款神器。专治各种切屏多动症。浮动图片(安卓版)全局置顶图片永远钉在最上层。盖住其他所有APP。随心操控自由拖动位置。随意…...
告别泊车翻车!用Python手把手教你搭建二自由度车辆模型(附代码)
二自由度车辆模型实战:从原理到避坑指南 泊车时方向盘打满,仿真结果却和实际相差十万八千里?很多刚入行自动驾驶仿真的工程师都踩过这个坑。二自由度模型作为车辆动力学的基础工具,在高速巡航等小转角场景表现优异,但遇…...
CSerialPort 4.3.2 保姆级集成指南:5分钟让你的QT/MFC/Electron项目拥有稳定串口功能
CSerialPort 4.3.2 全栈集成实战:从QT到Electron的跨平台串口方案 在工业控制、物联网设备调试和嵌入式系统开发中,串口通信作为最基础也最可靠的数据传输方式之一,至今仍发挥着不可替代的作用。然而,不同操作系统提供的串口API差…...
UPS、EPS蓄电池更换周期及更换判定标准详解
在机房后备供电、工业不间断供电、消防应急供电体系中,UPS不间断电源与EPS应急电源的核心储能载体均为蓄电池。蓄电池的健康状态,直接决定整套应急供电系统的可靠性,是电气运维、机房维保、消防设施巡检的重点工作内容。在实际运维工作中&…...
Agent Skills 万千应用 · 第04篇 Excel 分析 Skill:让 Agent 会整理表格、建公式、画图表
Agent Skills 万千应用 第04篇 Excel 分析 Skill:让 Agent 会整理表格、建公式、画图表01|场景痛点开场📊 周一早上,老板丢过来一份 Excel:销售流水 8000 行、客户名称有重复、日期格式不统一、金额里还混着“元”和空…...
三步解锁RPG Maker MV/MZ加密资源:新手也能快速提取游戏文件
三步解锁RPG Maker MV/MZ加密资源:新手也能快速提取游戏文件 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://g…...
HarmonyOS 6 Chip 组件:不显示后缀图标使用文档
文章目录概述源码隐藏后缀图标核心实现原理1. 核心控制字段2. 双重隐藏条件3. 冗余回调说明组件配置解析总结概述 Chip组件后缀图标包含两类:系统默认关闭图标、自定义suffixIcon后缀图标。 通过组件配置项可统一关闭后缀图标展示,实现仅前缀图标文字的…...
CANN/asc-devkit HCCL算法分析器指南
Algorithm Analyzer User Guide 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: …...
