深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理

手写体数字很熟悉吧,来自经典的Mnist数据集,我在不同阶段训练过这个数据集:不会神经网络时我用keras简单搭建全连接神经网络;学会深层神经网络原理后,我不用TensorFlow/Pytorch深度学习框架,手工搭建DNN;学习了TensorFlow的基本操作后,我用tf搭建了全连接神经网络。
回顾我做过的这些工作,让我对Mnist数据集有了较深的理解。然而纵观我实现这个训练过程的方式,仅仅用到的是DNN,甚至仅仅是SNN,完全没有涉及到做图像分类更好的网络模型——卷积神经网络CNN。
学到这一课,我也很欣喜!接下来一起学习学习如何搭建自己的卷积神经网络,完成手写数字的识别过程!

文章目录

  • 一、CNN网络搭建
  • 二、为什么要使用卷积?
  • 三、整合CNN神经网络

一、CNN网络搭建

  • 这个卷积神经网络的过程基于LeNet-5
  • 一般认为有权重的才作为神经网络的一层,所以CONV+POOL作为一层

深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第1张图片
拉伸后与全连接层FC进行连接,此时和DNN过程相同,要识别0-9数字,输出层用Softmax回归。
深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第2张图片
有关超参数调试的建议:
不要直接自己尝试参数,因为参数太多,尽量去选择文献中的优秀参数,选取别人任务中效果很好的架构去训练。
深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第3张图片

参数数量怎么计算?

  • 卷积过滤器中元素数量加1(偏置值b),再乘上过滤器的数量。
  • 池化层不含权重,这里默认为无参数。
  • FC层是DNN中的,FC3层的权重维度是(120,400),故有w 48000个,b 1个。

深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第4张图片

注意!默认卷积层中的过滤器各个通道参数相同,所以计算参数数量时不需要乘上通道数!

208 = ( 5 ∗ 5 + 1 ) ∗ 8 208=(5*5+1)*8 208=(55+1)8
416 = ( 5 ∗ 5 + 1 ) ∗ 16 416=(5*5+1)*16 416=(55+1)16
48001 = 400 ∗ 120 + 1 48001=400*120+1 48001=400120+1
10081 = 120 ∗ 84 + 1 10081=120*84+1 10081=12084+1

二、为什么要使用卷积?

相比DNN来说,CNN有什么优势?
卷积可以减少参数的数量!我们可以用更小的数据集训练,从而防止过拟合!
深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第5张图片

CNN仅仅需要更少的参数,而DNN需要相当大数量的参数。举个例子如下:
深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第6张图片
如果是用DNN的全连接方式,参数的数量是3072*4704=14M
那如果用CNN呢?每个过滤器25+1=26个参数,6个过滤器共156个参数(默认每个过滤器的各个通道拥有相同参数)
CNN可以使用更少的参数进行训练,就是因为参数共享,如果一个特征检测器(过滤器)可以检测某个部分垂直边缘,那么它也可以检测其他部分的垂直边缘。

  • 参数共享
    CNN可以使用更少的参数进行训练,就是因为参数共享,如果一个特征检测器(过滤器)可以检测某个部分垂直边缘,那么它也可以检测其他部分的垂直边缘。
  • 稀疏连接
    在每一层中,每个输出值仅仅依赖于一小部分输入。比如输出中的第一个元素0,仅和图像中36个元素的左上角9个相连接,与其他元素无关。

提到卷积神经网络的属性——善于捕捉平移不变性(将猫向右平移两个像素,猫依旧清晰)我们用同一个过滤器生成各层中的图像的所有像素值,网络通过自动学习变得更加健壮。

三、整合CNN神经网络

深度学习笔记(三十三)卷积神经网络识别手写数字的工作原理_第7张图片

  • 通过卷积层、池化层、全连接层搭建神经网络结构,最后通过Softmax回归输出预测值。
  • 计算代价函数J。
  • 通过梯度下降/动量梯度下降/RMSProp/Adam优化器对所有参数进行优化更新。

你可能感兴趣的:(【深度学习/神经网络】Deep,Learning)