本文是对卷积神经网络模型参数量和浮点运算量的计算推导公式和方法,使用API自动计算这些数据请移步另一篇博客:自动计算模型参数量、FLOPs、乘加数以及所需内存等数据
1.对CNN而言,每个卷积层的参数量计算如下:
其中表示输出通道数,表示输入通道数,表示卷积核宽,表示卷积核高。
括号内的表示一个卷积核的权重数量,+1表示bias,括号表示一个卷积核的参数量,表示该层有个卷积核。
若卷积核是方形的,即,则上式变为:
需要注意的是,使用Batch Normalization时不需要bias,此时计算式中的+1项去除。
2.对CNN而言,每个卷积层的运算量计算如下:
FLOPs是英文floating point operations的缩写,表示浮点运算量,中括号内的值表示卷积操作计算出feature map中一个点所需要的运算量(乘法和加法), 表示一次卷积操作中的乘法运算量,表示一次卷积操作中的加法运算量,+ 1 表示bias,W和H分别表示feature map的长和宽,表示feature map的所有元素数。
若是方形卷积核,即,则有:
上面是乘运算和加运算的总和,将一次乘运算或加运算都视作一次浮点运算。
在计算机视觉论文中,常常将一个‘乘-加’组合视为一次浮点运算,英文表述为'Multi-Add',运算量正好是上面的算法减半,此时的运算量为:
3.对全连接层而言,其参数量非常容易计算:
值得注意的是,最初由feature map flatten而来的向量视为第一层全连接层,即此处的。
可以这样理解上式:每一个输出神经元连接着所有输入神经元,所以有个权重,每个输出神经元还要加一个bias。
也可以这样理解:每一层神经元(O这一层)的权重数为,bias数量为O。
4.对全连接层而言,其运算量计算如下:
其中
中括号的值表示计算出一个神经元所需的运算量,第一个表示乘法运算量,表示加法运算量,+1表示bias,表示计算O个神经元的值。
分组卷积和深度分离卷积的情况待更……