ML/DL-复习笔记【九】- 神经网络中各层的计算量与参数量

本节为ML/DL-复习笔记【九】- 神经网络中各层的计算量与参数量,主要内容包括:标准卷积、空洞卷积、转置卷积、深度可分离卷积以及全连接层的计算量、参数量与输出特征图尺寸计算。

1. 标准卷积

1.1 计算量

  计算量以做乘法和加法的次数为单位,对于输入特征图f=(B,H,W,C),卷积核kernel=(K,S,C,O)【(核尺寸,步长,输入通道数,输出通道数)】。

  首先看一次卷积的计算量,一个k×kktimes kk×k的卷积,执行一次卷积操作,需要k×kktimes kk×k次乘法操作(卷积核每个参数都要和特征图上的像素相乘一次)和k×k−1ktimes k-1k×k1次加法操作(k×kktimes kk×k个数加起来),所以一次卷积需要乘加次数为k×k+ktimes k+k×k+k×k−1=2×k×k−1ktimes k-1=2times ktimes k-1k×k1=2×k×k1

  接着看在一个特征图上执行卷积需要进行卷积的次数:
(H−K+PhS+1)×(W−K+PwS+1)(frac{H-K+P_h}{S}+1)times(frac{W-K+P_w}{S}+1) (SHK+Ph+1)×(SWK+Pw+1)

  其中Ph,PwP_h,P_wPh,Pw是高和宽方向填充的像素。

  然后看C个特征图上还需要乘上C,并且需要输出O个特征图,再考虑batch_size,最终计算量:
B×O×C×(C−1)×(H−K+PhS+1)Btimes Otimes Ctimes (C-1)times(frac{H-K+P_h}{S}+1) B×O×C×(C1)×(SHK+Ph+1)
×(W−K+PwS+1)×(2×k×k−1)times(frac{W-K+P_w}{S}+1) times(2times ktimes k-1 ) ×(SWK+Pw+1)×(2×k×k1)

1.2 参数量

  卷积层参数量仅仅与卷积核大小、偏置和BN有关,对于卷积核kernel=(K,S,C,O),权重参数量K×K×C×OKtimes Ktimes Ctimes OK×K×C×O,偏置参数量为O,如果使用了BN,那么还有两个可学习参数α,βalpha,betaα,β2×O2times O2×O,所以该卷积层的参数量为:
K×K×C×O+O+2×OKtimes Ktimes Ctimes O+O+2times O K×K×C×O+O+2×O

1.3 输出特征图尺寸

  输入特征图尺寸H×W×CHtimes Wtimes CH×W×C,卷积核kernel=(K,S,C,O,P)【(核尺寸,步长,输入通道数,输出通道数,填充)】,则:
Hout=(H−K+2P)/S+1H_{out}=(H-K+2P)/S+1 Hout=(HK+2P)/S+1
Wout=(W−K+2P)/S+1W_{out}=(W-K+2P)/S+1 Wout=(WK+2P)/S+1

1.4 计算方式

在这里插入图片描述
在这里插入图片描述
  具体地,原始卷积核:
在这里插入图片描述

  重排列:
在这里插入图片描述

  本质上就是卷积矩阵的每一行只是一个重新排列的卷积核矩阵,在不同的地方用零填充:
在这里插入图片描述

  然后把输入矩阵拉伸:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 空洞卷积

  一个标准卷积的卷积核kernel=(K,S,C,O,P)【(核尺寸,步长,输入通道数,输出通道数,填充)】引入一个超参数d表示扩张率,则核尺寸k变为k+(k-1)*(d-1),相应地,输出特征图尺寸:
Hout=(H−K−(K−1)∗(d−1)+2P)/S+1H_{out}=(H-K-(K-1)*(d-1)+2P)/S+1 Hout=(HK(K1)(d1)+2P)/S+1
Wout=(W−K−(K−1)∗(d−1)+2P)/S+1W_{out}=(W-K-(K-1)*(d-1)+2P)/S+1 Wout=(WK(K1)(d1)+2P)/S+1

  空洞卷积并没有引入额外的参数量,但是显然会增加计算量。

3. 转置卷积

3.1 特征图尺寸

  转置卷积的输入是标准卷积的输出,二者对调即可:
Hin=(Hout−K+2P)/S+1H_{in}=(H_{out}-K+2P)/S+1 Hin=(HoutK+2P)/S+1
Win=(Wout−K+2P)/S+1W_{in}=(W_{out}-K+2P)/S+1 Win=(WoutK+2P)/S+1
⟹Longrightarrow
Hout=(Hin−1)×S−2P+KH_{out}=(H_{in}-1)times S-2P+K Hout=(Hin1)×S2P+K
Wout=(Win−1)×S−2P+KW_{out}=(W_{in}-1)times S-2P+K Wout=(Win1)×S2P+K

3.2 计算方式

  对于转置卷积:
在这里插入图片描述
在这里插入图片描述

4. 深度可分离卷积

特征图尺寸计算核标准卷积一样。

4.1 计算量

  输入特征图尺寸(Df,Df,M),(D_f,D_f,M),(Df,Df,M)卷积核(Dk,Dk,M,N)[卷积核尺寸,输入和输出通道数](D_k,D_k,M,N)[卷积核尺寸,输入和输出通道数](Dk,Dk,M,N)[],输出特征图尺寸(DG,DG,N)(D_G,D_G,N)(DG,DG,N),计算量:
DK∗DK∗M∗N∗DF∗DFD_K*D_K*M*N*D_F*D_FDKDKMNDFDF
  拆分之后,深度卷积负责滤波,尺寸(Dk,Dk,1,M)(D_k,D_k,1,M)(Dk,Dk,1,M),输出特征图(DG,DG,M)(D_G,D_G,M)(DG,DG,M);逐点卷积负责通道转换,尺寸(1,1,M,N)(1,1,M,N)(1,1,M,N),最终输出(DG,DG,N)(D_G,D_G,N)(DG,DG,N),计算量:
DK∗DK∗M∗DF∗DF+M∗N∗DF∗DFD_K*D_K*M*D_F*D_F+M*N*D_F*D_FDKDKMDFDF+MNDFDF

4.2 参数量

M∗K∗K+N∗MM*K*K+N*M MKK+NM

5. 全连接层

  考虑输入特征图尺寸7×7×5127times 7times 5127×7×512,全连接层将特征图展开为一维向量1×40961times 40961×4096,实际上用了4096个7×7×5127times 7times 5127×7×512的滤波器去做卷积,参数量来到了7×7×512×4096=1027604487times 7times 512times 4096=1027604487×7×512×4096=102760448,这也就是常说的全连接层参数冗余,能够占到整个网络参数的80%以上。

  全连接层计算量和参数量的计算方法一样。

参考:

  • 卷积神经网络参数量和计算量的计算
    (https://blog.csdn.net/liuweiyuxiang/article/details/99637649)
  • CNN中卷积层参数量与输出特征图(feature map)尺寸的计算公式
    (https://blog.csdn.net/gaishi_hero/article/details/81512404)
  • 卷积,特征图,转置卷积和空洞卷积的计算细节
    (https://www.jianshu.com/p/09ea4df7a788)
  • 看懂转置卷积
    (http://www.360doc.com/content/19/0507/12/57110788_834069126.shtml)
  • CNN卷积层、全连接层的参数量、计算量(https://zhuanlan.zhihu.com/p/77471991)

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

Published by

风君子

独自遨游何稽首 揭天掀地慰生平