【Deep Learning】计算PyTorch模型的FLOPs

1. 衡量深度学习模型重量级的指标

参数量:
CNN:
一个卷积核的参数 = kkCin+1
一个卷积层的参数 = (一个卷积核的参数)卷积核数目=kkCinCout+Cout

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

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

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

2. CNN的FLOPs的计算公式:

(1) 知乎:
在这里插入图片描述
Ci、Co表示输入和输出通道,K卷积核大小,HW是输出的feature map大小。其中括号中的式子这样理解:

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

(2) nvida论文:
在这里插入图片描述
论文里应该是把n个累加直接当成加n次,还算上了个bais

(3)torchstat库
简单用代码实验了下,如下图:

在这里插入图片描述
Flops:44,158,464 = 222222(333+1)32
params:896 = 3
3332
推算了下它的公式FLOPs = HW(KKCin+1)*Cout (又是不一样的!)
FullyConnect的FLOPs:
在这里插入图片描述
I输入神经元数目,O输出神经元个数。同理,考虑bais没有-1

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

浮点运算量和参数量的区别:
浮点运算量是实际运算过程中的加减乘除计算过程中的计算次数,描述计算力;
参数量只是指的模型大小,和输入的图片大小无关,描述需要内存
在这里插入图片描述
不能只用FLOPs作为网络速度的指标。
FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC\并行度\平台

3. 其他指标

3.1 MAC(Memory Access Cost)

比如:MAC(内存访问成本),计算机在进行计算时候要加载到缓存中,然后再计算,这个加载过程是需要时间的。其中,分组卷积(group convolution)是对MAC消耗比较多的操作(例如AlexNet多GPU)。
kk普通卷积(不算bais)的FLOPs和MAC:
FLOPs = 2
h2w2kkc1c2
MAC=输入+输出+权重参数=h1
w1c1+h2w2c2+c1c2kk

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

在这里插入图片描述
1*1卷积普通卷积:

在这里插入图片描述
结论:FLOPs一定时,当且仅当c1=c2,MAC越小。

1*1分组卷积:
在这里插入图片描述
结论:B不变,g越大MAC越大

3.2 并行度

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

3.3 计算平台的不同

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值