【深度学习】关于CNN网络的FLOPs的计算

在评估一个CNN网络的计算复杂度时,浮点数运算(float point operation)是一个常用的衡量指标。注意本文介绍的主要是MAC(乘法加法操作),在一些论文里是仅仅考虑乘法操作的。

在常规的计算中,通常不考虑非线性函数的计算量(the nonlinearity),对于卷积操作:(带bias)

F L O P s = 2 ∗ H W ∗ ( C i n K 2 + 1 ) C o u t = 2 ∗ ( H W K 2 C i n C o u t + H W C o u t ) FLOPs = 2*HW*(C_{in}K^{2}+1)C_{out} \\ =2*(HWK^{2}C_{in}C_{out} +HW C_{out}) FLOPs=2HW(CinK2+1)Cout=2(HWK2CinCout+HWCout)

此处经评论提醒,已更正
其中式子中 H W K 2 C i n C o u t HWK^{2}C_{in}C_{out} HWK2CinCout为卷积操作, H W C o u t HWC_{out} HWCout为bias操作,2则表示为MAC操作(包含累加及累乘)

上面是NVIDIA在文章《PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE》文章中的计算方式。

但有人认为这是一种估算,他们认为对于卷积的计算量计算如下(不含bias):

F L O P s = ( 2 ∗ C i n ∗ K 2 − 1 ) ∗ H ∗ W ∗ C o u t FLOPs = (2*C_{in}*K^{2} - 1) * H * W * C_{out} FLOPs=(2CinK21)HWCout

其中第一个括号可拆成 ( C i n ∗ K 2 + C i n ∗ K 2 − 1 ) (C_{in} * K^{2} + C_{in} * K^{2} -1) (CinK2+CinK21),原因是n个数相加需要n-1次加法,此处不含bias。若没有-1则是带bias的计算方式。他们认为Nvidia是一种估算。

实际上两种计算的差别不是很大。

对于全连接操作:输入维度 I I I,输出维度 O O O,则全连接层(不含bias):

F L O P s = ( 2 × I − 1 ) × O FLOPs = (2 \times I-1) \times O FLOPs=(2×I1)×O

全连接操作,含bias:

F L O P s = 2 × I × O FLOPs = 2 \times I \times O FLOPs=2×I×O

这里是没有考虑全连接中的bias操作,比如x1+x2+…xn只有(n-1)次加法。

Ref:

  1. PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE
  2. https://www.zhihu.com/question/65305385/answer/451060549
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值