模型计算力(flops)和参数(parameters)

    1. 模型计算力(flops)和参数(parameters)

https://zhuanlan.zhihu.com/p/144938518

 

提纲:
Ø 参数量
Ø FLOPS\FLOPs\GFLOPs
Ø 浮点运算和参数量的区别
Ø 不能绝对的用FLOPs作为速度衡量的原因——MAC\并行度\平台

 

参数量:

CNN:
一个卷积核的参数 = k*k*Cin+1
一个卷积层的参数 = (一个卷积核的参数)*卷积核数目=k*k*Cin*Cout+Cout

 

FLOPS:

注意:全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

 

FLOPs:

注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

但是关于FLOPs的公式花样百出,不过大致形式都差不多,没有找到特别统一的说法。

CNN的FLOPs:

  1. (1) 知乎:

Ci、Co表示输入和输出通道,K卷积核大小,HW是输出的feature map大小。其中括号中的式子这样理解:

左边是乘法运算量,右边是加法运算量,因为n个数字要加n-1次,所以有个-1.这里忽略了bais如果算上bais需要把-1去掉。

 

  1. (2) nvida论文:

论文里应该是把n个累加直接当成加n次,还算上了个bais

 

  1. (3)torchstat库

简单用代码实验了下,如下图:

Flops:44,158,464 = 222*222*(3*3*3+1)*32
params:896 = 3*3*3*32

推算了下它的公式FLOPs = H*W*(K*K*Cin+1)*Cout (又是不一样的!)

FullyConnect的FLOPs:

I输入神经元数目,O输出神经元个数。同理,考虑bais没有-1

 

GFLOPs:这其实是一个单位,1GLOPs=10亿次浮点运算。是Paper里比较流行的单位。

浮点运算量和参数量的区别:
浮点运算量是实际运算过程中的加减乘除计算过程中的计算次数,描述计算力;
参数量只是指的模型大小,和输入的图片大小无关,描述需要内存

 

不能只用FLOPs作为网络速度的指标。

FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC\并行度\平台

  1. 1.MAC(Memory Access Cost)

比如:MAC(内存访问成本),计算机在进行计算时候要加载到缓存中,然后再计算,这个加载过程是需要时间的。其中,分组卷积(group convolution)是对MAC消耗比较多的操作(例如AlexNet多GPU)。

k*k普通卷积(不算bais)的FLOPs和MAC:
FLOPs = 2*h2*w2*k*k*c1*c2
MAC=输入+输出+权重参数=h1*w1*c1+h2*w2*c2+c1*c2*k*k

普通卷积和分组卷积的参数量:

1*1卷积普通卷积:

结论:FLOPs一定时,当且仅当c1=c2,MAC越小。

1*1分组卷积:

结论:B不变,g越大MAC越大

 

  1. 2.并行度

第二个对速度有相当大影响的重要因素就是模型的并行度。
在相同的FLOPs下,具有高并行度的模型可能比具有低并行度的另一个模型快得多。如果网络的并行度较高,那么速度就会有显著的提升。

 

  1. 3.计算平台的不同
    不同的运行平台,得到的FLOPs也不相同。有的平台会对操作进行优化,比如:cudnn加强了对3×3conv计算的优化。这样一来,不同平台的FLOPs大小确实没有什么说服力。

 

Ref:

https://arxiv.org/abs/1611.06440v2

https://www.zhihu.com/question/65305385/answer/451060549

分享一个FLOPs计算神器——https://www.jianshu.com/p/b1ceaa7effa8

https://zhuanlan.zhihu.com/p/67009992

https://www.e-learn.cn/topic/3471595

https://github.com/Captain1986/CaptainBlackboard/blob/master/D%230023-CNN模型计算量估计/D%230023.md

https://blog.csdn.net/weixin_39833897/article/details/105807172C

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值