在学习机器学习和神经网络过程中,对于模型参数和模型计算量需要做出评估,这篇文章介绍几种常见操作对模型带来的参数量和计算量,更专业的表示为空间复杂度和时间复杂度,后续再补充。
注意:下面计算的是都是单层的参数量和计算量,并且是对于一个样本的计算量,如果计算批量样本,需要给下面计算量乘以BatchSize。
卷积层
卷积运算的参数量
计算公式:$parameter = (k_{w} \times k_{h} \times C_{in} + 1 )\times filter\ number$;
即:$参数量\ =(kernal_wide \times kernal_high \times 输入的特征图的通道数 + 偏置 )\times 当前层filter数量$;
以VGG-16模型的Conv1-1卷积为例,输入$224 \times 224 \times 3$,有$64$个$3 \times 3$大小filter,输出feature map为$224 \times 224 \times 64$,那么该层具有的参数量为:$(3 \times 3 \times 3 + 1)\times 64 = 1792$
卷积运算的计算量
- FLOPs(Floating Point Operations),浮点运算次数,用来衡量算法的时间复杂度;
- FLOPS(Floating Point Operations per Seconds),单位时间浮点运算次数,用来衡量硬件计算性能。
$FLOPs=\left[\left(C_{i n} \times k_{w} \times k_{h}\right)+\left(C_{i n} \times k_{w} \times k_{h}-1\right)+1\right] \times C_{o u t} \times W_{out} \times H_{out}$
$k_{w}$ 和 $k_{h}$ 分别表示卷积核的宽和高,其中 $C_{i n} \times k_{w} \times k_{h}$ 表示乘法计算量, $C_{i n} \times k_{w} \times k_{h}-1$ 表示加法计算量(可以这样理解,需要把乘法计算得到的$C_{i n} \times k_{w} \times k_{h}$个数字加这么多次), $+1$ 表示偏置, $C_{\text {out }} \times W_{out} \times H_{out}$ 表示 feature $\operatorname{map}$ 中的所有元素, $W_{out} \text{、} H_{out}$ 表示feature map的宽和高。
全连接层
全连接运算的参数量
计算公式: $parameter =\left(N_{i n}+1\right) \times N_{\text {out }}$
$N_{i n}$ 表示输入特征向量的维数, +1表示偏置, $N_{out}$ 表示输出向量的维数
全连接运算的计算量
$FLOPs=[N_{in}+(N_{in}-1)+1] \times N_{out}$
$N_{in}$ 和 $N_{out}$ 分别表示输入的特征数和输出的特征数。
其中$N_{in}$表示乘法运算量, $N_{in}-1$ 表示加法运算量,+1表示偏置。
池化层
池化层运算的参数量
无参数。
池化层运算的计算量
$FLOPs=C_{out} \times H_{out} \times W_{out} \times k \times k$
$k \times k$ 代表在原特征图区域$k \times k$ 的 max ,sum或者avg池化操作;
$H_{out} \times W_{out}$代表输出特征图大小,$C_{out}$代表输出通道数。
案例
参数量
VGG-19模型,输入图片大小为$3 \times 224 \times 224$,表示为$3$通道$224 \times 224$尺寸的图像输入,模型分为五组卷积和三层全连接层。
$(3 \times 3 \times 3 + 1) \times 64 + (3 \times 3 \times 64 + 1) \times 64 + (3 \times 3 \times 64 + 1) \times 128 + (3 \times 3 \times 128 + 1) \times 128 +$
$(3 \times 3 \times 128 + 1) \times 256 + (3 \times 3 \times 256 + 1) \times 256 + (3 \times 3 \times 256 + 1) \times 256 + (3 \times 3 \times 256 + 1) \times 256 +$
$(3 \times 3 \times 256 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 +$
$(3 \times 3 \times 512 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 + (3 \times 3 \times 512 + 1) \times 512 +$
$(512 \times 7 \times 7 + 1) \times 4096 + (4096 + 1) \times 4096 + (4096 + 1) \times 1000$
计算得143667240,乘以一个浮点数占4个字节,得574668960字节,为548.04MB,和论文中的数量大致相等。
计算量
VGG-19模型,输入图片大小为$3 \times 224 \times 224$,表示为$3$通道$224 \times 224$尺寸的图像输入,模型分为五组卷积和三层全连接层。
- 第一组卷积
- $(3 \times 3 \times 3 + 3 \times 3 \times 3 - 1 + 1) \times 64 \times 224 \times 224 = 173408256$
- $(64 \times 3 \times 3 + 64 \times 3 \times 3 - 1 + 1) \times 64 \times 224 \times 224 = 3699376128$
- 池化
- $64 \times 112 \times 112 \times 2 \times 2 = 3211264$
- 第二组卷积
- $(64 \times 3 \times 3 + 64 \times 3 \times 3 - 1 + 1) \times 128 \times 112 \times 112 = 1849688064$
- $(128 \times 3 \times 3 + 128 \times 3 \times 3 - 1 + 1) \times 128 \times 112 \times 112 = 3699376128$
- 池化
- $128 \times 56 \times 56 \times 2 \times 2 = 1605632$
- 第三组卷积
- $(128 \times 3 \times 3 + 128 \times 3 \times 3 - 1 + 1) \times 256 \times 56 \times 56 = 1849688064$
- $(256 \times 3 \times 3 + 256 \times 3 \times 3 - 1 + 1) \times 256 \times 56 \times 56 = 3699376128$
- $(256 \times 3 \times 3 + 256 \times 3 \times 3 - 1 + 1) \times 256 \times 56 \times 56 = 3699376128$
- $(256 \times 3 \times 3 + 256 \times 3 \times 3 - 1 + 1) \times 256 \times 56 \times 56 = 3699376128$
- 池化
- $256 \times 28 \times 28 \times 2 \times 2 = 802816$
- 第四组卷积
- $(256 \times 3 \times 3 + 256 \times 3 \times 3 - 1 + 1) \times 512 \times 28 \times 28 = 1849688064$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 28 \times 28 = 3699376128$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 28 \times 28 = 3699376128$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 28 \times 28 = 3699376128$
- 池化
- $512 \times 14 \times 14 \times 2 \times 2 = 401408$
- 第五组卷积
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 14 \times 14 = 924844032$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 14 \times 14 = 924844032$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 14 \times 14 = 924844032$
- $(512 \times 3 \times 3 + 512 \times 3 \times 3 - 1 + 1) \times 512 \times 14 \times 14 = 924844032$
- 池化
- $512 \times 7 \times 7 \times 2 \times 2 = 100352$
- 第一个全连接层
- $(512 \times 7 \times 7 + 512 \times 7 \times 7 - 1 + 1) \times 4096 = 205520896$
- 第二个全连接层
- $(4096 + 4096 - 1 + 1) * 4096 = 33554432$
- 第三个全连接层
- $(4096 + 4096 - 1 + 1) * 1000 = 8192000$
- 共计:39264124928 = 39.2 bilion次运算,将这个值换算为multiply-adds运算,需要除以2,得到19.6bilion,该值与论文中的计算量一致。(此次运算忽略了ReLu激活层的计算量,该计算量较小,可以忽略)
工具
torchinfo
torchinfo 该工具可以自动统计网络模型的参数量和计算量。
例子:
|
|
结果:
|
|
参考:
https://zhuanlan.zhihu.com/p/135861716
https://zhuanlan.zhihu.com/p/49842046
https://zhuanlan.zhihu.com/p/31575074
更新记录
增加网络模型统计工具,自动进行网络参数和计算量统计。 —— 2022.07.19