前提:
- 有一张32*32*3的RGB图片作为输入。
- 想做手写体数字识别,图片中含有某个数字,比如 7 。你想识别它是从0-9中的哪一个,我们构建一个神经网络来实现这个功能。
过程:
- 第一层使用卷积核大小为 5*5,步长为 1 ,padding是0,卷积核个数为6,那么输出为28*28*6。将这层标记为Conv1.它用了6个过滤器,增加了偏差,应用了非线性函数,可能是Relu非线性函数。
- 然后构建一个池化层,这里选用最大池化,参数 f = 2 ,s = 2 ,表示层的高度和宽度都会减少一半。因此,28*28变成了14*14,通道数量不变,所以最终输出结果为14*14*6,将该输出标记为Pool1。
- 我们把卷积层和池化层当做第一层layer1。
- 再构建一个卷积层,卷积核大小为 5*5 ,步幅为1,这次我们用16个卷积核,最后输出一个10*10*16的矩阵,标记为Conv2。
- 最后做最大池化,超参数f = 2, s = 2,高度和宽度减半,最后输出为5*5*16,标记为pool2
- 这两个是神经网络的第二层layer2。
- 5*5*16矩阵包含400个元素,现在将pool2平整化为一个大小为400的一维向量。我们可以把平整化结果想象成这样的一个神经元集合,然后利用这400个单元构建下一层。
- 下一层包含120个单元,这400个单元和这120个单元紧密相连。这就是我们的第一个全连接层,标记为FC3。
- 它的权重矩阵为????[3],维度为 120×400。这就是所谓的“全连接”,因 为这 400 个单元与这 120 个单元的每一项连接,还有一个偏差参数。最后输出 120 个维度, 因为有 120 个输出。
- 然后我们对这个120个单元再添加一个全连接层,这层更小,假设它含有84个单元,标记为FC4。
- 最后,用这84个单元填充一个softmax单元,如果我们想通过手写数字识别来识别手写0-9这十个数字,这个softmax就会有十个输出。
现在,我想指出的是,随着神经网络深度的加深,高度????????和宽度????????通常都会减少,前 面我就提到过,从 32×32 到 28×28,到 14×14,到 10×10,再到 5×5。所以随着层数增加,高 度和宽度都会减小,而通道数量会增加,从 3 到 6 到 16 不断增加,然后得到一个全连接层。 在神经网络中,另一种常见模式就是一个或多个卷积后面跟随一个池化层,然后一个或多个卷积层后面再跟一个池化层,然后是几个全连接层,最后是一个 softmax。这是神经网 络的另一种常见模式。
接下来我们讲讲神经网络的**值形状,**值大小和参数数量。输入为 32×32×3,这 些数做乘法,结果为 3072,所以**值???? [0]有 3072 维,**值矩阵为 32×32×3,输入层没有 参数。计算其他层的时候,试着自己计算出**值,这些都是网络中不同层的**值形状和 **值大小。
有几点要注意,第一,池化层和最大池化层没有参数;第二卷积层的参数相对较少,前 面课上我们提到过,其实许多参数都存在于神经网络的全连接层。观察可发现,随着神经网络的加深,**值尺寸会逐渐变小,如果**值尺寸下降太快,也会影响神经网络性能。示例中,**值尺寸在第一层为 6000,然后减少到 1600,慢慢减少到 84,最后输出 softmax 结果。我们发现,许多卷积网络都具有这些属性,模式上也相似。