CNN学习笔记-模型衡量参数

CNN学习笔记-模型衡量参数

计算量

CNN的计算量通常用乘加数(Multi-Add)来表示,与输入输出图尺寸有关,通常卷积层的占比最大。

卷积层

假设kernel-size为\(k \times k \times C_{in}\),数量为\(C_{out}\)。输入feature map尺寸为\(H_{in} \times W_{in} \times C_{in}\),输出feature map尺寸为\(H_{out} \times W_{out} \times C_{out}\)
那么Multi-Add为\((k \times k \times C_{in} + k \times k \times C_{in}-1) \times (H_{out} \times W_{out} \times C_{out}) = (2 \times k \times k \times C_{in} -1) \times (H_{out} \times W_{out} \times C_{out})\)    (不考虑bias的情况)
若考虑bias,则Multi-Add为\((k \times k \times C_{in} + k \times k \times C_{in}) \times (H_{out} \times W_{out} \times C_{out}) = (2 \times k \times k \times C_{in}) \times (H_{out} \times W_{out} \times C_{out})\)

Multi-Add的计算意义为:
\(k \times k \times C_{in}\):表示一个kernel的一次卷积操作,最后在输出feature map形成一个结点的乘法操作次数。
\(k \times k \times C_{in} - 1\):表示那上述乘数结果加在一起的加法次数。
\(\times (H_{out} \times W_{out} \times C_{out})\):表示一共进行了这么多次乘加操作(feature map的一个结点对应kernel的一次完整卷积操作)
考虑bias加一是因为一个kernel对应一个位置的卷积操作中,有一个与偏置常数相关的加法操作,+1后与-1抵消。

全连接层

假设I代表input size,O表示output size。
那么Multi-Add为\((2 \times I -1) \times O\)
同理考虑bias后无-1。I+(I-1)的意义与convolutional layer一致,前者表示乘法数,后者表示加法数。

参数量

CNN的参数量,即parameters,与输入图像尺寸无关。

卷积层

假设kernel-size为\(k \times k \times C_{in} \times C_{out}\),即卷积核数量为\(C_{out}\)。
那么\(parameters = (k \times k \times C_{in} \times C_{out}) + C_{out}\)
\(k \times k \times C_{in} \times C_{out}\)表示kernel中的所有参数量,\(+ C_{out}\)表示bias数量,一个kernel对应一个bias。

全连接层

假设I代表input size,O表示output size。
parameters = I × O + O
+O表示每一个输出结点有一个bisa

池化层

Pooling layer无参数。

FLOPs

全称为floating point operations,即浮点运算量,理解为计算量。
在CNN中理解为等同于Multi-Add

模型大小

Model Size(MB),即模型保存在本地时的大小。

总结

附上一张经典模型的衡量标准图
1GFLOPs = 1×10^9 FLOPs

文章目录
  1. 1. CNN学习笔记-模型衡量参数
    1. 1.1. 计算量
      1. 1.1.1. 卷积层
      2. 1.1.2. 全连接层
    2. 1.2. 参数量
      1. 1.2.1. 卷积层
      2. 1.2.2. 全连接层
      3. 1.2.3. 池化层
    3. 1.3. FLOPs
    4. 1.4. 模型大小
    5. 1.5. 总结
|