网络参数和Flops计算

  • 网络参数计算
    • 1. 卷积层
    • 2. 线性层
    • 3. 归一化层
  • Flops
    • 1. 卷积层
    • 2. 线性层
    • 3. 归一化
  • 计算的模块

网络参数计算

1. 卷积层

假设输入维度为m,输出维度为n,卷积核大小为(k, k)

  • bias=True: 一个卷积核含有的参数为 m k 2 mk^{2} mk2,有n个卷积核,所以总参数为 m n k 2 + n mnk^{2}+n mnk2+n
  • bias=False: 没有bias时,不需要加上最后的n,总参数为 m n k 2 mnk^{2} mnk2

nn.Conv2d(3, 20, (3, 3), stride=1, padding=1)

bias默认为True

上述参数为 2 × 3 2 × 20 + 20 = 560 2\times 3^{2}\times 20+20=560 2×32×20+20=560,如果设置bias=False就是540

2. 线性层

假设输入维度为m,输出维度为n

  • bias=True: 输入为m,输出为n,参数为 m n + n mn+n mn+n
  • bias=False: 没有bias时,不需要加上最后的n,总参数为 m n mn mn

nn.Linear(3, 20, bias=True)

bias默认为True

上述参数为 3 × 20 + 20 = 80 3\times 20+20=80 3×20+20=80,如果设置bias=False就是60

3. 归一化层

假设输入维度为m

  • affine=True: 有两个可学习的参数 α \alpha α和 β \beta β,参数2m
  • affine=False: 没有参数,0

nn.BatchNorm2d(20, affine=True)

affine默认为True

上述参数为 2 × 20 = 40 2\times 20=40 2×20=40,如果affine=False为0

Flops

Flops的运算为:一次乘加运算为一次Flops

1. 卷积层

假设输入维度为m,输出维度为n,卷积核大小为(k, k),输出特征图的尺寸为(H,W)

一个卷积核每进行一次卷积所需要乘法是 m k 2 mk^{2} mk2,加法 m ( k 2 − 1 ) + ( m − 1 ) = m k 2 − 1 m(k^{2}-1)+(m-1)=mk^{2}-1 m(k2−1)+(m−1)=mk2−1,所以一个卷积核的计算量为 m k 2 mk^{2} mk2(忽略掉那-1的运算,乘加就相等了),输出的特征图为HW,输出channel为n,所以总共的Flops为: H W n × m k 2 HWn\times mk^{2} HWn×mk2

2. 线性层

假设输入维度为m,输出维度为n,batch为b

从下图可以看出b=128,我们先不管这个参数,他的每一个数据m=20,n=30,b中的每一个数据都需要计算m次乘法,计算完之后如果有bias需要额外计算m次加法,输出维度为n,所以一共需要计算mn次乘法和mn次加法,即Flops: m n mn mn,算上batch为 b m n bmn bmn

3. 归一化

假设输出维度为m,Batch为b

归一化层有可学习的参数 α 和 β \alpha和\beta α和β,各有m次乘加操作,所以Flops: m m m,算上batch为 b m bm bm

计算的模块

torchsummary模块

pip install torchsummary

from torchsummary import summary
summary(model, (3, 224, 224))

flops_counter模块

GitHub地址:https://github.com/sovrasov/flops-counter.pytorch

pip install ptflops

from ptflops import get_model_complexity_info
flops, params = get_model_complexity_info(model, (3, 224, 224), as_strings=True, print_per_layer_stat=True)

网络参数和Flops计算相关推荐

  1. Pytorch统计网络参数计算工具、模型 FLOPs, MACs, MAdds 关系

    Pytorch统计网络参数 #网络参数数量 def get_parameter_number(net):total_num = sum(p.numel() for p in net.parameter ...

  2. 卷积层计算量(FLOPS)和参数量的计算

    1.卷积参数量的计算,若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量 ...

  3. pytorch 模型可视化_PyTorch Tips(FLOPs计算/参数量/计算图可视化/相关性分析)

    最近在做Research Project的时候,发现有些小工具很好用,记录在此. 1. 准确的FLOPS 计算 网上开源的很多计算flops的工具只支持计算PyTorch内置层的flops,不能有效计 ...

  4. 卷积核大小对网络参数和计算量的影响

    下面展示了同一尺寸图像经过不同尺寸卷积核得到相同尺寸featuremap的过程,以及不同的参数量和计算量(这里不包含偏置): 一般卷积核的深度与上层featuremap深度(featuremap数)相 ...

  5. PyTorch中CNN网络参数计算和模型文件大小预估

    前言 在深度学习CNN构建过程中,网络的参数量是一个需要考虑的问题.太深的网络或是太大的卷积核.太多的特征图通道数都会导致网络参数量上升.写出的模型文件也会很大.所以提前计算网络参数和预估模型文件大小 ...

  6. CNN中parameters和FLOPs计算

    CNN中parameters和FLOPs计算 以AlexNet为例,先注意观察每层编注的通道数的变化. 1. 卷积网络的参数量的计算(parameters) CNN中的parameters分为两种:W ...

  7. 使用pytorch构建一个神经网络、损失函数、反向传播、更新网络参数

    关于torch.nn: 使用Pytorch来构建神经网络, 主要的工具都在torch.nn包中. nn依赖于autograd来定义模型, 并对其自动求导. 构建神经网络的典型流程: 定义一个拥有可学习 ...

  8. 神经网络中参数量parameters和FLOPs计算

    一.神经网络中参数量parameters和FLOPs计算 CNN中的parameters分为两种:W和b,对于某一个卷积层,它的parameters的个数为: (Kh∗Kw∗Cin)∗Cout+Cou ...

  9. 神经网络参数量的计算:以UNet为例

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:Hello王叔叔 知乎链接:https://zhuanlan.zhihu.c ...

最新文章

  1. 2020年中国智慧城市发展值得关注的技术
  2. 阻塞 、非阻塞;同步、异步
  3. nginx服务器带宽_Nginx限制带宽配置示例
  4. 使用 case when进行行列转换
  5. Java.lang.IllegalStateException Activity has been destroyed
  6. 网格自适应_ANSYS 非线性自适应(NLAD)网格划分及应用举例
  7. 求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)
  8. admin客户管理系统html5模板
  9. java中hashcode和equals的区别和联系
  10. 推荐:安全公司的一些面试题
  11. QT学习之做一个简易图片处理器(后续补全)
  12. springboot整合J2cache简单使用
  13. 【CS106】编译原理笔记4 —— 用普遍性泵引理(Pumping lemma)证明语言的正则性
  14. css样式的灵异事件
  15. Could not retrieve transation read-only status server 的解决办法
  16. Ubuntu 20.04系统中Sage(sagemath)安装及使用详细过程
  17. 网络OSI(七层模型)
  18. Python virtualenv工具设置虚拟环境和VS code调试Python
  19. 用python做视觉检测系统_教你用 Python 做一个物体检测系统
  20. Libc堆管理机制及漏洞利用技术(一)

热门文章

  1. PHP+Mysql—留言管理系统网站(前端+后端、整套源码)
  2. CDA Level1知识点总结之多维数据透视分析
  3. 两个顺序栈共享一个数组的存储空间
  4. MySql连接不上问题
  5. 流量复制导流工具研究
  6. 计算机应用基础win,计算机应用基础(Win 7+Office 2010)
  7. 2、简单的onclick点击事件
  8. [LeetCode] 230. Kth Smallest Element in a BST
  9. 锐速ServerCheck序列号生成原理
  10. 利用google or-tools 求解逻辑难题:斑马问题