模型参数、计算量总结

2020-02-21  本文已影响0人  查令84号街头

首先要理清楚:FLOPs的计算是包括了加法次数的

CNN


输入尺寸 C_i * H_i * W_i ,卷积核的大小为 K * K,输出的尺寸大小为 C_{o} * H_{o} * W_{o}

参数量

(1)不考虑bias:paremeters = K^2*C_i*C_o
(2)考虑bias:paremeters = (K^2*C_i+1)*C_o

FLOPs

(1)不考虑bias
FLOPs = (2*C_i*K^2 -1)*C_o*H_o*W_o

解释:先计算输出的feature中一个元素需要的计算量,即括号这一部分,根据卷积的公式可知这部分为C_i * K^2 + C_i * K^2-1,其中前一项表示做了的乘法次数,后一项表示这些乘法结果的相加次数,因为n个数相加需要n-1次。所以显然如果考虑bias的话刚好把这个1给补回去。
(2)考虑bias
FLOPs = 2*C_i*K^2*C_o*H_o*W_o

全连接

输入维度C_i,输出C_o

参数量

(1)不考虑bias:paremeters = C_i * C_o
(2)考虑bias:paremeters = (C_i + 1) * C_o

FLOPs

这个很简单,全连接层就理解为一个矩阵,C_o是矩阵行数,C_i为列数,若不考虑bias,则先计算输出向量中的一个元素需要多少计算量,首先要做C_i次乘法,然后做C_i-1次加法。若考虑bias,则做的加法会多一次
(1)不考虑bias
FLOPs = (2*C_i -1) * C_o

(2)考虑bias
FLOPs = (2*C_i) * C_o

Depth-wise CNN(深度可分离卷积)

输入尺寸 C_i * H_i * W_i ,卷积核的大小为 K * K,输出的尺寸大小为 C_{o} * H_{o} * W_{o}

深度可分离卷积的过程:
  1. 将普通卷积分为C_i组,进行卷积的时候是没有普通卷积中在通道维度上求和的过程的
  2. 用一个1 * 1的卷积核来进行通道融合,所以总的参数量和FLOPs计算如下
    不考虑bias的情况下计算如下:
    \begin{aligned} paremeters &= K^2*C_i +C_i*C_o\\ FLOPs &= (2*K^2-1)*C_i*W_o*H_o+(2*C_i -1)*C_o*W_o*H_o \end{aligned}

考虑bias的情况计算如下:
\begin{aligned} paremeters &= K^2*C_i+C_i +C_i*C_o+C_o\\ FLOPs &= 2*K^2*C_i*H_o*W_o +2*C_i*C_o*H_o*W_o\\ &=2*(K^2+C_o)*C_i*W_o*H_o \end{aligned}

上一篇下一篇

猜你喜欢

热点阅读