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

卷积神经网络基础

如何计算CNN的参数量?

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

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

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

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

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

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

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

你可能感兴趣的:(面试题)