卷积层计算量(FLOPS)和参数量的计算

1.卷积参数量的计算,若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量为Cout,则输出特征图的大小为Cout×Hout×Wout,其中:

Hout=⌊(H−K1+2P1)/S1⌋+1

Wout=⌊(W−K2+2P2)/S2⌋+1

⌊⋅⌋表示向下取整。

参数量的计算,由于卷积层共享参数的特性,做一次卷积只和输入通道数Cin,卷积核的大小K1和K2有关,而与输入高度Hin和宽度Win无关。因此,当输出通道数为Cout时,卷积核的参数量为:

Cout×Cin×K1×K2
bias的参数为:Cout
因此,总的参数量为:

Cout×Cin×K1×K2+Cout

2.卷积层浮点数操作(FLOPS)计算量,卷积操作本质上是个线性运算,通常可表示为:

y=Wx+b
这里面涉及到了乘法运算和加法运算,下面将进行一一说明。

乘法运算:

为了得到输出特征图中的某一个像素,需要Cin×K1×K2次乘法运算,而特征图总共有Cout×Hout×Wout个像素,则总计需要的乘法运算量为:

Cout×Hout×Wout×(Cin×K1×K2)

加法运算

当前主流的浮点运算次数(floating point operations,FLOPs)的计算,一般只考虑加上bias的一次加法。
bias=True,则加法运算次数为Cout×Hout×Wout×1;
bias=False,则加法运算次数为0。

综上,bias为True时,总的FLOPS为:

Cout×Hout×Wout×(Cin×K1×K2+1)

bias为False时,总的FLOPS为:

Cout×Hout×Wout×(Cin×K1×K2)

你可能感兴趣的:(深度学习基础)