机器学习

卷积神经网络模型参数量和运算量计算方法

2019-07-24  本文已影响0人  西北小生_

本文是对卷积神经网络模型参数量和浮点运算量的计算推导公式和方法,使用API自动计算这些数据请移步另一篇博客:自动计算模型参数量、FLOPs、乘加数以及所需内存等数据

1.对CNN而言,每个卷积层的参数量计算如下:

params = C_o × (k_w × k_h × C_i +1)
其中C_o表示输出通道数,C_i表示输入通道数,k_w表示卷积核宽,k_h表示卷积核高。
括号内的w × h × C_i表示一个卷积核的权重数量,+1表示bias,括号表示一个卷积核的参数量,C_o ×表示该层有C_o个卷积核。
若卷积核是方形的,即k_w = k_h = k,则上式变为:
params = C_o × (k^2 × C_i +1)
需要注意的是,使用Batch Normalization时不需要bias,此时计算式中的+1项去除。

2.对CNN而言,每个卷积层的运算量计算如下:

FLOPs = [(C_i × k_w × k_h) + (C_i × k_w × k_h - 1) + 1] × C_o × W × H
FLOPs是英文floating point operations的缩写,表示浮点运算量,中括号内的值表示卷积操作计算出feature map中一个点所需要的运算量(乘法和加法),C_i × k_w × k_h 表示一次卷积操作中的乘法运算量,C_i × k_w × k_h - 1表示一次卷积操作中的加法运算量,+ 1 表示bias,W和H分别表示feature map的长和宽,× C_o × W × H表示feature map的所有元素数。
若是方形卷积核,即k_w = k_h = k,则有:
FLOPs = 2 × C_i × k^2 × C_o × W × H
上面是乘运算和加运算的总和,将一次乘运算或加运算都视作一次浮点运算。
在计算机视觉论文中,常常将一个‘乘-加’组合视为一次浮点运算,英文表述为'Multi-Add',运算量正好是上面的算法减半,此时的运算量为:
FLOPs = C_i × k^2 × C_o × W × H

3.对全连接层而言,其参数量非常容易计算:

params = (I + 1) × O = I×O + O
值得注意的是,最初由feature map flatten而来的向量视为第一层全连接层,即此处的I
可以这样理解上式:每一个输出神经元连接着所有输入神经元,所以有I个权重,每个输出神经元还要加一个bias。
也可以这样理解:每一层神经元(O这一层)的权重数为I×O,bias数量为O。

4.对全连接层而言,其运算量计算如下:

FLOPs = [I + (I-1) +1]×O = (2 × I) × O
其中 I = input\ nerons, O = output\ nerons
中括号的值表示计算出一个神经元所需的运算量,第一个I表示乘法运算量,I-1表示加法运算量,+1表示bias,×O表示计算O个神经元的值。

分组卷积和深度分离卷积的情况待更……

上一篇 下一篇

猜你喜欢

热点阅读