卷积层参数量和计算量计算公式

603 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

0. 变量定义

假设输入的特征图(feature map)的shape为[Height, Weight, Channel],对应的字母表示为[Hin,Win,Cin][ H_{in}, W_{in}, C_{in}]; 卷积核(kernel)的shape为[Hk,Wk][H_{k}, W_{k}], 滤波器(filter)的shape为[Cout,Hout,Wout,Cin][C_{out}, H_{out}, W_{out}, C_{in}]; 输出的feature map的shape为[Hout,Wout,Cout][H_{out}, W_{out}, C_{out}];padding=[P1,P2][P_1, P_2];stridding=[S1,S2][S_1, S_2] 不难推出:

Hout=[Hin+2P1HkS1]+1(0-1)H_{out}=\left[\frac{H_{in}+2P_1-H_k}{S_1}\right]+1\tag{0-1}
Wout=[Win+2P2WkS2]+1(0-2)W_{out}=\left[\frac{W_{in}+2P_2-W_k}{S_2}\right]+1\tag{0-2}

其中[  ][\ \ ]代表向下取整

1. 卷积层的参数量计算

卷积核(kernel)的参数量:Hk×WkH_{k}\times W_{k} 滤波器(filter)的参数量:Cout×Hk×Wk×CinC_{out}\times H_{k}\times W_{k}\times C_{in} bias参数量:CoutC_{out} 总的参数量:Cout×Hk×Wk×Cin+CoutC_{out}\times H_{k}\times W_{k}\times C_{in}+C_{out}

2. 卷积操作的计算量

2.1. 乘法计算量

为了得到输出feature map的一个像素点,需要进行Cin×Hk×WkC_{in}\times H_k\times W_k次乘法操作。因此为了得到整个输出feature map,需要进行Cout×Hout×Wout×Cin×Hk×WkC_{out}\times H_{out}\times W_{out}\times C_{in}\times H_k\times W_k次乘法。

2.2. 加法计算量

为了得到输出feature map的一个像素点,需要进行Cin×(Hk×Wk1)+(Cin1)+1=Cin×Hk×WkC_{in}\times (H_k\times W_k-1)+(C_{in}-1)+1=C_{in}\times H_k\times W_k次加法操作。注意最后一个1是bias。因此为了得到整个输出feature map,需要进行Cout×Hout×Wout×Cin×Hk×WkC_{out}\times H_{out}\times W_{out}\times C_{in}\times H_k\times W_k次加法。 居然和乘法计算量一样!

参考

www.cnblogs.com/qinduanying…