【面试向】FLOPs与参数量的计算

FLOPs

FLOPs(floating point operations),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。注意不要和FLOPS(floating point operations per second)搞混。

拿卷积操作举例。这里需要注意,卷积的计算量如果从output map size考虑的话,是可以与input map size无关的。因为卷积的每一次矩阵相乘都一定输出output map的一个像素点,但如果从input map下手的话,还需要考虑stride和padding。

所以卷积层的FLOPs计算公式为:

其中Ci和Co分别为输入输出的通道数,K为卷积核大小,H和W分别为output map的高和宽。

这个公式前半部分的运算就是每计算一个输出元素所需要的计算量,就是output map的元素数量。之所以要×2是因为一次卷积运算需要进行乘法和加法两种操作(相乘后求和),比如说两个3×3大小的矩阵相乘求和得到一个元素值,需要进行3×3次乘法操作和3×3-1次加法操作,再加上神经网络中的bias,运算量一共为2×3×3。

同理可得全连接层的FLOPs计算公式为:

参数量

卷积参数量的计算比较简单,这里带过一下:

实际工程上要计算这两个值的话的话,感觉github上有挺多包的……

-------------本文结束感谢您的阅读-------------