文章目录

  • 1. 推导公式
    • 1.1 CNN Params
    • 1.2 CNN Flops
    • 1.3 Linear Params
    • 1.4 Linear Flops
  • 2. 计算方法
    • 2.1 parameters法
    • 2.2 thop法
    • 2.3 torchstat法
    • 2.4 torchsummary法

1. 推导公式


1.1 CNN Params

1.2 CNN Flops

1.3 Linear Params

1.4 Linear Flops

2. 计算方法


2.1 parameters法

通过遍历模型的parameters获取结构以及参数:

    model = 你自己的模型,eg:CNN()  ResNet()  SegNet()....params = list(model.parameters())k = 0for i in params:l = 1print("该层的结构:" + str(list(i.size())))for j in i.size():l *= jprint("该层参数和:" + str(l))k = k + lprint("总参数数量和:" + str(k))

效果如下:

2.2 thop法

thop是一个库,可以通过pip install thop进行安装,安装后通过里面的profile可以获取参数量params以及计算量flops

from thop import profile
model = 自己的模型实例化
flops, params = profile(model, inputs=传入模型的输入shape,这个必须要填)

以resnet18进行测试:

import torch
from torchvision.models import resnet18
from thop import profile
model = resnet18()
input = torch.randn(1, 3, 128, 128)
flops, params = profile(model, inputs=(input, ))
print('flops:{}'.format(flops))
print('params:{}'.format(params))

2.3 torchstat法

还是一样,没有的先pip install torchstat即可,还是以restnet18为例:

from torchstat import stat
from torchvision.models import resnet18model = resnet18()
stat(model, (3, 224, 224))

输出:

[MAdd]: AdaptiveAvgPool2d is not supported!
[Flops]: AdaptiveAvgPool2d is not supported!
[Memory]: AdaptiveAvgPool2d is not supported!module name  input shape output shape      params memory(MB)             MAdd            Flops  MemRead(B)  MemWrite(B) duration[%]    MemR+W(B)
0                      conv1    3 224 224   64 112 112      9408.0       3.06    235,225,088.0    118,013,952.0    639744.0    3211264.0       6.25%    3851008.0
1                        bn1   64 112 112   64 112 112       128.0       3.06      3,211,264.0      1,605,632.0   3211776.0    3211264.0       1.09%    6423040.0
2                       relu   64 112 112   64 112 112         0.0       3.06        802,816.0        802,816.0   3211264.0    3211264.0       0.28%    6422528.0
3                    maxpool   64 112 112   64  56  56         0.0       0.77      1,605,632.0        802,816.0   3211264.0     802816.0       5.61%    4014080.0
4             layer1.0.conv1   64  56  56   64  56  56     36864.0       0.77    231,010,304.0    115,605,504.0    950272.0     802816.0       4.61%    1753088.0
5               layer1.0.bn1   64  56  56   64  56  56       128.0       0.77        802,816.0        401,408.0    803328.0     802816.0       0.25%    1606144.0
6              layer1.0.relu   64  56  56   64  56  56         0.0       0.77        200,704.0        200,704.0    802816.0     802816.0       0.09%    1605632.0
7             layer1.0.conv2   64  56  56   64  56  56     36864.0       0.77    231,010,304.0    115,605,504.0    950272.0     802816.0       3.72%    1753088.0
8               layer1.0.bn2   64  56  56   64  56  56       128.0       0.77        802,816.0        401,408.0    803328.0     802816.0       0.21%    1606144.0
9             layer1.1.conv1   64  56  56   64  56  56     36864.0       0.77    231,010,304.0    115,605,504.0    950272.0     802816.0       3.63%    1753088.0
10              layer1.1.bn1   64  56  56   64  56  56       128.0       0.77        802,816.0        401,408.0    803328.0     802816.0       0.20%    1606144.0
11             layer1.1.relu   64  56  56   64  56  56         0.0       0.77        200,704.0        200,704.0    802816.0     802816.0       0.09%    1605632.0
12            layer1.1.conv2   64  56  56   64  56  56     36864.0       0.77    231,010,304.0    115,605,504.0    950272.0     802816.0       3.68%    1753088.0
13              layer1.1.bn2   64  56  56   64  56  56       128.0       0.77        802,816.0        401,408.0    803328.0     802816.0       0.20%    1606144.0
14            layer2.0.conv1   64  56  56  128  28  28     73728.0       0.38    115,505,152.0     57,802,752.0   1097728.0     401408.0       3.13%    1499136.0
15              layer2.0.bn1  128  28  28  128  28  28       256.0       0.38        401,408.0        200,704.0    402432.0     401408.0       0.19%     803840.0
16             layer2.0.relu  128  28  28  128  28  28         0.0       0.38        100,352.0        100,352.0    401408.0     401408.0       0.07%     802816.0
17            layer2.0.conv2  128  28  28  128  28  28    147456.0       0.38    231,110,656.0    115,605,504.0    991232.0     401408.0       4.24%    1392640.0
18              layer2.0.bn2  128  28  28  128  28  28       256.0       0.38        401,408.0        200,704.0    402432.0     401408.0       0.19%     803840.0
19     layer2.0.downsample.0   64  56  56  128  28  28      8192.0       0.38     12,744,704.0      6,422,528.0    835584.0     401408.0       1.59%    1236992.0
20     layer2.0.downsample.1  128  28  28  128  28  28       256.0       0.38        401,408.0        200,704.0    402432.0     401408.0       0.22%     803840.0
21            layer2.1.conv1  128  28  28  128  28  28    147456.0       0.38    231,110,656.0    115,605,504.0    991232.0     401408.0       3.54%    1392640.0
22              layer2.1.bn1  128  28  28  128  28  28       256.0       0.38        401,408.0        200,704.0    402432.0     401408.0       0.19%     803840.0
23             layer2.1.relu  128  28  28  128  28  28         0.0       0.38        100,352.0        100,352.0    401408.0     401408.0       0.07%     802816.0
24            layer2.1.conv2  128  28  28  128  28  28    147456.0       0.38    231,110,656.0    115,605,504.0    991232.0     401408.0       3.50%    1392640.0
25              layer2.1.bn2  128  28  28  128  28  28       256.0       0.38        401,408.0        200,704.0    402432.0     401408.0       0.17%     803840.0
26            layer3.0.conv1  128  28  28  256  14  14    294912.0       0.19    115,555,328.0     57,802,752.0   1581056.0     200704.0       3.33%    1781760.0
27              layer3.0.bn1  256  14  14  256  14  14       512.0       0.19        200,704.0        100,352.0    202752.0     200704.0       0.17%     403456.0
28             layer3.0.relu  256  14  14  256  14  14         0.0       0.19         50,176.0         50,176.0    200704.0     200704.0       0.08%     401408.0
29            layer3.0.conv2  256  14  14  256  14  14    589824.0       0.19    231,160,832.0    115,605,504.0   2560000.0     200704.0       5.48%    2760704.0
30              layer3.0.bn2  256  14  14  256  14  14       512.0       0.19        200,704.0        100,352.0    202752.0     200704.0       0.21%     403456.0
31     layer3.0.downsample.0  128  28  28  256  14  14     32768.0       0.19     12,794,880.0      6,422,528.0    532480.0     200704.0       1.37%     733184.0
32     layer3.0.downsample.1  256  14  14  256  14  14       512.0       0.19        200,704.0        100,352.0    202752.0     200704.0       0.17%     403456.0
33            layer3.1.conv1  256  14  14  256  14  14    589824.0       0.19    231,160,832.0    115,605,504.0   2560000.0     200704.0       4.35%    2760704.0
34              layer3.1.bn1  256  14  14  256  14  14       512.0       0.19        200,704.0        100,352.0    202752.0     200704.0       0.17%     403456.0
35             layer3.1.relu  256  14  14  256  14  14         0.0       0.19         50,176.0         50,176.0    200704.0     200704.0       0.08%     401408.0
36            layer3.1.conv2  256  14  14  256  14  14    589824.0       0.19    231,160,832.0    115,605,504.0   2560000.0     200704.0       3.91%    2760704.0
37              layer3.1.bn2  256  14  14  256  14  14       512.0       0.19        200,704.0        100,352.0    202752.0     200704.0       0.17%     403456.0
38            layer4.0.conv1  256  14  14  512   7   7   1179648.0       0.10    115,580,416.0     57,802,752.0   4919296.0     100352.0       5.84%    5019648.0
39              layer4.0.bn1  512   7   7  512   7   7      1024.0       0.10        100,352.0         50,176.0    104448.0     100352.0       0.21%     204800.0
40             layer4.0.relu  512   7   7  512   7   7         0.0       0.10         25,088.0         25,088.0    100352.0     100352.0       0.09%     200704.0
41            layer4.0.conv2  512   7   7  512   7   7   2359296.0       0.10    231,185,920.0    115,605,504.0   9537536.0     100352.0       9.87%    9637888.0
42              layer4.0.bn2  512   7   7  512   7   7      1024.0       0.10        100,352.0         50,176.0    104448.0     100352.0       0.25%     204800.0
43     layer4.0.downsample.0  256  14  14  512   7   7    131072.0       0.10     12,819,968.0      6,422,528.0    724992.0     100352.0       1.76%     825344.0
44     layer4.0.downsample.1  512   7   7  512   7   7      1024.0       0.10        100,352.0         50,176.0    104448.0     100352.0       0.18%     204800.0
45            layer4.1.conv1  512   7   7  512   7   7   2359296.0       0.10    231,185,920.0    115,605,504.0   9537536.0     100352.0       7.26%    9637888.0
46              layer4.1.bn1  512   7   7  512   7   7      1024.0       0.10        100,352.0         50,176.0    104448.0     100352.0       0.23%     204800.0
47             layer4.1.relu  512   7   7  512   7   7         0.0       0.10         25,088.0         25,088.0    100352.0     100352.0       0.08%     200704.0
48            layer4.1.conv2  512   7   7  512   7   7   2359296.0       0.10    231,185,920.0    115,605,504.0   9537536.0     100352.0       6.57%    9637888.0
49              layer4.1.bn2  512   7   7  512   7   7      1024.0       0.10        100,352.0         50,176.0    104448.0     100352.0       0.23%     204800.0
50                   avgpool  512   7   7  512   1   1         0.0       0.00              0.0              0.0         0.0          0.0       0.25%          0.0
51                        fc          512         1000    513000.0       0.00      1,023,000.0        512,000.0   2054048.0       4000.0       0.71%    2058048.0
total                                                   11689512.0      25.65  3,638,757,912.0  1,821,399,040.0   2054048.0       4000.0     100.00%  101756992.0
=================================================================================================================================================================
Total params: 11,689,512
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Total memory: 25.65MB
Total MAdd: 3.64GMAdd
Total Flops: 1.82GFlops
Total MemR+W: 97.04MBProcess finished with exit code 0

弊端:shape只能是3维的

assert isinstance(input_size, (tuple, list)) and len(input_size) == 3

2.4 torchsummary法

还是一样,用pip install torchsummay进行安装,通过下方例子进行调用。

from torchsummary import summarymodel = resnet18()
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
summary(model.to(device), input_size=(3, 224, 224), batch_size=8)

输出:

----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1          [8, 64, 112, 112]           9,408BatchNorm2d-2          [8, 64, 112, 112]             128ReLU-3          [8, 64, 112, 112]               0MaxPool2d-4            [8, 64, 56, 56]               0Conv2d-5            [8, 64, 56, 56]          36,864BatchNorm2d-6            [8, 64, 56, 56]             128ReLU-7            [8, 64, 56, 56]               0Conv2d-8            [8, 64, 56, 56]          36,864BatchNorm2d-9            [8, 64, 56, 56]             128ReLU-10            [8, 64, 56, 56]               0BasicBlock-11            [8, 64, 56, 56]               0Conv2d-12            [8, 64, 56, 56]          36,864BatchNorm2d-13            [8, 64, 56, 56]             128ReLU-14            [8, 64, 56, 56]               0Conv2d-15            [8, 64, 56, 56]          36,864BatchNorm2d-16            [8, 64, 56, 56]             128ReLU-17            [8, 64, 56, 56]               0BasicBlock-18            [8, 64, 56, 56]               0Conv2d-19           [8, 128, 28, 28]          73,728BatchNorm2d-20           [8, 128, 28, 28]             256ReLU-21           [8, 128, 28, 28]               0Conv2d-22           [8, 128, 28, 28]         147,456BatchNorm2d-23           [8, 128, 28, 28]             256Conv2d-24           [8, 128, 28, 28]           8,192BatchNorm2d-25           [8, 128, 28, 28]             256ReLU-26           [8, 128, 28, 28]               0BasicBlock-27           [8, 128, 28, 28]               0Conv2d-28           [8, 128, 28, 28]         147,456BatchNorm2d-29           [8, 128, 28, 28]             256ReLU-30           [8, 128, 28, 28]               0Conv2d-31           [8, 128, 28, 28]         147,456BatchNorm2d-32           [8, 128, 28, 28]             256ReLU-33           [8, 128, 28, 28]               0BasicBlock-34           [8, 128, 28, 28]               0Conv2d-35           [8, 256, 14, 14]         294,912BatchNorm2d-36           [8, 256, 14, 14]             512ReLU-37           [8, 256, 14, 14]               0Conv2d-38           [8, 256, 14, 14]         589,824BatchNorm2d-39           [8, 256, 14, 14]             512Conv2d-40           [8, 256, 14, 14]          32,768BatchNorm2d-41           [8, 256, 14, 14]             512ReLU-42           [8, 256, 14, 14]               0BasicBlock-43           [8, 256, 14, 14]               0Conv2d-44           [8, 256, 14, 14]         589,824BatchNorm2d-45           [8, 256, 14, 14]             512ReLU-46           [8, 256, 14, 14]               0Conv2d-47           [8, 256, 14, 14]         589,824BatchNorm2d-48           [8, 256, 14, 14]             512ReLU-49           [8, 256, 14, 14]               0BasicBlock-50           [8, 256, 14, 14]               0Conv2d-51             [8, 512, 7, 7]       1,179,648BatchNorm2d-52             [8, 512, 7, 7]           1,024ReLU-53             [8, 512, 7, 7]               0Conv2d-54             [8, 512, 7, 7]       2,359,296BatchNorm2d-55             [8, 512, 7, 7]           1,024Conv2d-56             [8, 512, 7, 7]         131,072BatchNorm2d-57             [8, 512, 7, 7]           1,024ReLU-58             [8, 512, 7, 7]               0BasicBlock-59             [8, 512, 7, 7]               0Conv2d-60             [8, 512, 7, 7]       2,359,296BatchNorm2d-61             [8, 512, 7, 7]           1,024ReLU-62             [8, 512, 7, 7]               0Conv2d-63             [8, 512, 7, 7]       2,359,296BatchNorm2d-64             [8, 512, 7, 7]           1,024ReLU-65             [8, 512, 7, 7]               0BasicBlock-66             [8, 512, 7, 7]               0
AdaptiveAvgPool2d-67             [8, 512, 1, 1]               0Linear-68                  [8, 1000]         513,000
================================================================
Total params: 11,689,512
Trainable params: 11,689,512
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 4.59
Forward/backward pass size (MB): 502.34
Params size (MB): 44.59
Estimated Total Size (MB): 551.53
----------------------------------------------------------------Process finished with exit code 0

弊端:需要比较大的显存空间才能使用

综上:我觉得thop方法比较好用

参考链接:

  1. https://blog.csdn.net/qq_41573860/article/details/116767639
  2. https://www.jianshu.com/p/d4db25322435

【25】模型参数量Params与计算量Flops的计算方法相关推荐

  1. 【YOLOv5-6.x】模型参数量param及计算量FLOPs解析

    文章目录 前言 参数量param和计算量FLOPs简介 参数量 计算量 YOLOv5计算模型参数 训练和验证输出模型参数不同的原因分析 输出模型参数结果(以YOLOv5s-coco2017为例) 参数 ...

  2. 神经网络的参数量(Params)和计算量(FLOPs)

    定义 参数量(Params) 参数量是指模型训练中需要训练的参数总数.用来衡量模型的大小(计算空间复杂度). 计算量(FLOPs) 浮点运算次数,理解为计算量(计算时间复杂度),可以用来衡量算法的复杂 ...

  3. 6种方法计算神经网络参数量Params、计算量FLOPs、Macs简单代码

    方法1:统计模型参数量 total = sum([param.nelement() for param in model.parameters()]) print("Number of pa ...

  4. 模型参数量(Params)/模型大小 Pytorch统计模型参数量

    模型参数量大小可以从保存的checkpoint文件直观看出来 total_params = sum(p.numel() for p in model.parameters()) total_param ...

  5. 神经网络的计算量(FLOPs)、参数量(Params)、推理时间(FPS)的定义及实现方法

    目录 1. 定义 2. 实现方法 2.1. 计算参数量 2.2. 计算参数量和FLOPs 2.3. 计算推理时间(FPS) 3. 数据大小对参数量和FLOPs的影响 4. 参数量和FLOPs对于硬件要 ...

  6. 【深度学习】深度学习中模型计算量(FLOPs)和参数量(Params)等的理解以及四种在python应用的计算方法总结

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

  7. pytorch计算模型参数量

    1. 安装 thop 1.1 常规安装 pip install thop 1.2 若上述安装方式错误,可以参考以下方式: pip install thop-i http://pypi.douban.c ...

  8. 模型计算量(FLOPs)和参数量(Params)的理解

    (1)换算 以alexnet为例: 参数量:6000万 设每个参数都是float,也就是一个参数是4字节, 总的字节数是24000万字节 24000万字节= 24000万/1024/1024=228m ...

  9. 【pytorch】深度学习所需算力估算:flops及模型参数量

    目录 计算量的要求是在于芯片的floaps(指的是gpu的运算能力) 参数量对应显存大小选型 常见的英伟达显卡的FLOPS和显存规格 pytorch中的floaps与显存计算方法 计算量的要求是在于芯 ...

最新文章

  1. 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  2. JDK8:使用Optional进行变量判空、集合遍历
  3. 文献学习(part19)--Graph Connectivity In Sparse Subspace Clustering
  4. ENSP配置 实例十一 综合实验
  5. 关于 WebRequest.RegisterPrefix
  6. java应用程序必须有主类_2020最新版Java基础知识面试题
  7. ACM时间复杂度及算法的选择分析
  8. xp系统支持的python版本_xp系统安装不上python
  9. 电信天翼网关与路由器级联
  10. Win10开启卓越性能模式
  11. ubi命令用法(linux)
  12. 为什么要处理自然语言? | NLP基础
  13. 台计算机的本地打印机 并且,三台电脑,怎么共用一台打印机?
  14. 英语足球foteball运动
  15. 手机产品设计之用户引导
  16. 重新认识 Java 的 System.in
  17. win10下docker搭建ES7集群
  18. 第二篇:在MVPArms项目使用了androidx和butterknife报错
  19. Silvaco学习笔记——Save,log
  20. 整理web前端架构师应会必会的技术栈

热门文章

  1. 来点干货,怎么面国企或银行?终于写完了
  2. Mysql:insert into select与 insert into values
  3. 设圆半径r,圆柱高h求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
  4. CentOS中如何检测IP冲突
  5. 飞项| 产品经理如何搭建团队协作构建体系
  6. CHM文件打开空白是什么原因
  7. vector 内存释放
  8. css实现3D旋转效果
  9. spring cloud gateway 之 动态路由改造
  10. 三星s9 测试性能软件,三星S9+和iPhone8+软件打开速度测试:谁才是状元郎