卷积神经网络基础题——如何计算CNN的参数量?

卷积神经网络基础

如何计算CNN的参数量?

先从简单的单层结构分析:

卷积神经网络基础题——如何计算CNN的参数量?
CNN的单层结构与标准的神经网络单层结构非常相似:
Z[l]=W[l]A[l1]+bA[l]=g[l](Z[l])Z^{[l]}=W^{[l]}A^{[l-1]}+b \\A^{[l]}=g^{[l]}(Z^{[l]})
卷积运算对应着上式中的乘积运算,滤波器组数值对应着权重W[l]W^{[l]},所选的**函数为ReLU

下面来计算一下上图中参数的数目:
每个滤波器组有3x3x3=27个参数,还有1个偏移量b,则每个滤波器组有27+1=28个参数,两个滤波器组总共包含28x2=56个参数。

我们发现,在CNN中,参数数目只由滤波器组决定,选定滤波器组后,参数数目与输入图片尺寸无关。所以,就不存在由于图片尺寸过大,造成参数过多的情况。

对于更一般的卷积神经网络架构(如下图的图片识别CNN网络架构):

卷积神经网络基础题——如何计算CNN的参数量?
根据图中的顺序分析计算:

  • 输入层(input):input层是没有引进变量的
  • 卷积(convolution):卷积层则引入了"卷积核/filter",假设卷积核大小为nmn*m,图片有ll个通道(channels)/维度,而选用的"卷积核/filter"有kk个,再加上bias,可以得到引进的参数有:(nml+1)k(n*m*l+1)*k
  • **(activation):仅对原来的矩阵做了一个变换,不会引进新的参数
  • 池化(pooling):与**层同理,仅对原来的矩阵做了一个变换,不会引进新的参数
  • 拉平(Flatten):拉平操作仅仅对矩阵进行了reshape,也不会引进新的变量
  • 全连接(Fully Connected):全连接层就是对前后神经元做了仿射变换wix+bi\vec{w}_i\cdot\vec{x}+b_i,引进的参数有权重和偏置,假设n个神经元连接m个神经元,则引入的参数有(n+1)m(n+1)*m
  • 计算分类概率(Softmax):仅对原来的矩阵做了一个变换,不会引进新的参数