pytorch 计算网络模型的计算量FLOPs和参数量parameter之殊途同归

news2024/9/21 0:36:56

计算网络模型的计算量FLOPs和参数量parameter之殊途同归

  • 参数量方法一:pytorch自带方法,计算模型参数总量
  • 参数量方法二: summary的使用:来自于torchinfo第三方库
  • 参数量方法三: summary的使用:来自于torchsummary第三方库
  • 计算量方法一:thop的使用,输出计算量FLOPs和参数量parameter

在进行论文撰写时,我们通常要通过计算网络模型的计算量FLOPs和参数量parameter来评估模型的性能,本文总结了几种常用的计算方式,大家可以尝试一下。
为了能够便于读者理解,我们选取pytorch自带的网络resnet34进行测试,也可自行更改为其他或所提网络

参数量方法一:pytorch自带方法,计算模型参数总量

from torchvision.models import resnet34

net=resnet34() # 注意:模型内部传参数和不传参数,输出的结果是不一样的
# 计算网络参数
total = sum([param.nelement() for param in net.parameters()])
# 精确地计算:1MB=1024KB=1048576字节
print('Number of parameter: % .4fM' % (total / 1e6))

输出:

Number of parameter:  21.7977M

参数量方法二: summary的使用:来自于torchinfo第三方库

torchinfo 的 summary 更加友好,我个人觉得是 print 和 torchsummary 的 summary 的结合体!推荐!!!

from torchvision.models import resnet34
import torch
from torchinfo import summary  # 注意:当使用from torchsummary import summary时,对应的summary应该为:summary(model, input_size=(3, 512, 512), batch_size=-1)
if __name__ == "__main__":
    model = resnet34()
    tmp_0 = model(torch.rand(1, 3, 224, 224).cuda())
    print(tmp_0.shape)

    summary(model, (1, 3, 224, 224))# summary的函数内部参数形式与导入的第三方库有关,否则报错

输出结果如下:
在这里插入图片描述
在这里插入图片描述

参数量方法三: summary的使用:来自于torchsummary第三方库

torchsummary 中的 summary 可以打印每一层的shape, 参数量,

from torchvision.models import resnet34
from torchsummary import summary
model = resnet34()
summary(model, input_size=(3, 512, 512), batch_size=-1)# 同样是summary函数,注意与方法二的区别

输出结果如下:

在这里插入图片描述
在这里插入图片描述

计算量方法一:thop的使用,输出计算量FLOPs和参数量parameter

注意区分FLOPs和FLOPS
FLOPs就是表示模型前向传播中计算MAC(乘法加法操作的次数),如果FLOPs的值越大,也从一定程度上说明模型越复杂,模型需要的计算力(算力)更高,因此对硬件的要求也就越高!

from torchvision.models import resnet34
import torch
from thop import profile
if __name__ == "__main__":
    # #call Transception_res

    model = resnet34()
    input = torch.randn(1, 3, 512, 512)
    Flops, params = profile(model, inputs=(input,)) # macs
    print('Flops: % .4fG'%(Flops / 1000000000))# 计算量
    print('params参数量: % .4fM'% (params / 1000000)) #参数量:等价与上面的summary输出的Total params值

该网络模型中包含该方法的计算:https://github.com/Barrett-python/DuAT/blob/main/DuAT.py

输出结果:输出为网络模型的总参数量(单位M,即百万)与计算量(单位G,即十亿)

Flops:  19.2174G
params参数量:  21.7977M

在这里插入图片描述
参考链接:

  1. CNN 模型的参数(parameters)数量和浮点运算数量(FLOPs)是怎么计算的https://blog.csdn.net/weixin_41010198/article/details/108104309
  2. 区分FLOPs和FLOPS:https://blog.csdn.net/IT_flying625/article/details/104898152
  3. pytorch得到模型的计算量和参数量https://blog.csdn.net/qq_35407318/article/details/109359006
  4. 轻量化网络中常使用的参数量和计算量评估;https://blog.csdn.net/weixin_46274756/article/details/130391999如下图所示
    在这里插入图片描述
  5. Pytorch 中打印网络结构及其参数的方法与实现https://blog.csdn.net/like_jmo/article/details/126903727
  6. CNN 模型所需的计算力flops是什么?怎么计算?https://zhuanlan.zhihu.com/p/137719986
  7. FLOPS的计算:https://blog.csdn.net/baidu_35848778/article/details/127571810

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

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

相关文章

controlnet1.1预处理器功能详解

ControlNet 1.1 与 ControlNet 1.0 具有完全相同的体系结构,ControlNet 1.1 包括所有以前的模型,具有改进的稳健性和结果质量,但增加并细化了多个模型。 今天太忙了,有时间就把每个模型的测试样稿发出来 2023.4.27 分类预处理器备注模型黑白倒转invert边…

数据库物理存储结构

目录 一、数据库文件和文件组 1、数据库文件 (1) 主数据库文件(Primary Database File) (2) 次数据库文件(Secondary Database File) (3) 事务日志文件 …

[Linux]文档搜索和归档备份

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…

配置zabbix自定义监控项

1.需要安装zabbix-agent服务,使用的zabbix版本为5.0版本 参考:zabbix监控linux主机_Apex Predator的博客-CSDN博客 2.创建存放脚本目录并编辑监控服务的脚本(此处监控一下服务是否存活) mkdir /opt/zabbix_jb vi /opt/zabbix_jb/service_status.sh …

【容器化应用程序设计和开发】2.2 Dockerfile 的编写和最佳实践

往期回顾: 第一章:【云原生概念和技术】 第二章:2.1 容器化基础知识和Docker容器 容器化应用程序设计和开发 2.2 Dockerfile 的编写和最佳实践2.2.1 Dockerfile 包含哪些指令2.2.2 Dockerfile 注意事项 在上篇章节中,我们介绍了…

什么是索引?MySQL索引的底层数据结构

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引…

SAP 生产订单修改记录查询

无论在项目实施过程中还是在运维的项目中,经常会遇到生产订单被修改,导致需求发生变更,这个时候用户经常就会需要要求查询生产订单的修改记录。通过SAP的标准程序是没有办法查询到生产订单修改记录,这个时候就从开发的角度去做增强的方式去实现。 1、肯定是在生产订单保存…

AI(二):初体验(Cursor、Copilot、Bito)

Cursor Cursor官网下载:https://www.cursor.so/ && https://github.com/getcursor/cursor Cursor.so是一款基于GPT的代码生成工具,它可以帮助开发者快速生成代码,提高开发效率。GPT是一种自然语言处理技术,可以根据输入…

Lambda语法解析

Lambda语法解析 一.Lambda语法1.Lambda表达式基本形式:2.capture list(捕获列表)3.捕获列表程序案例 二.Lambda应用1.使用 lambda 表达式对数组排序,并将排序后的元素存储到新数组中:2.使用 lambda 表达式计算两个矩阵…

如何安装Auto-GPT

如何安装Auto-GPT 记录一下如何安装Auto-GPT 文章目录 如何安装Auto-GPT前提克隆项目进入项目目录安装所需的依赖重命名 .env.template 文件填写API_KEY创建auto-gpt.json文件运行 Auto-GPT 前提 在安装Auto-GPT之前,你需要具备以下条件: Git环境Python环…

从历史天气预报 API 看气象大数据的商业价值

引言 近年来,随着气象观测技术的不断提升和气象大数据的快速发展,越来越多的企业开始将气象数据应用于商业领域。其中,历史天气预报 API 作为一种可获取历史气象数据的接口,具有广泛的商业应用价值。 本文将从历史天气预报 API …

数字图像处理【8】频域滤波1—关于傅里叶

这一章是数字图像处理基础的最后一章。系统的介绍傅里叶级数、傅里叶变换、离散傅里叶变换,快速傅里叶变换,以及二维傅里叶变换在图像上的应用。 变换的作用 首先我们先来聊聊什么是“变换”?其实在第一章介绍 HSI 颜色模型的时候&#xff0…

数据库工具——mongostat

参考文档:mongostat​​​​​​​​​​​ mongostat提供了当前运行的mongod或者mongos实例的大概状态。mongostat有点类似Linux的vmstat,但mongostat提供的是mongod或者mongos实例的信息。 从MongoDB 4.4开始,mongostat现在与MongoDB Ser…

第五章——动态规划1

背包问题 01背包问题 有N个物品和容量是V的背包,每个物品有价值vi和权重(价值)wi属性,每件物品只能用一次(要么用0次,要么用1次),在背包能装得下的情况下,挑一部分物品装…

网络原理(四):传输层协议 TCP/UDP

目录 应用层 传输层 udp 协议 端口号 报文长度(udp 长度) 校验和 TCP 协议 确认应答 超时重传 链接管理 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 总结 我们第一章让我们对网络有了一个初步认识,第二章和第三章我们通…

bounding box线性回归

#bounding box regression原理 如图所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对…

MQTT协议 详解

文章目录 一、啥是MQTT?1. MQTT协议特点2. 发布和订阅3. QoS(Quality of Service levels)QoS 0 —— 最多1次QoS 1 —— 最少1次QoS 2 —— 只有1次 二、MQTT 数据包结构1. MQTT固定头2. MQTT可变头 / Variable header3. Payload消息体 三、M…

Redis集群常用命令及说明

一、集群的特点 1、集群架构特点 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽; (2)节点的fail是通过集群中超过半数的节点检测失效时才生效…

2023年5月广州/东莞/深圳产品经理认证NPDP招生简章

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

7.Shuffle详解

1.分区规则 ps."&"指的是按位与运算,可以强制转换为正数 ps."%",假设reduceTask的个数为3,则余数为0,1,2正好指代了三个分区 以上代码的含义就是对key的hash值强制取正之后,对reduce的个数取…