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

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

一、CNN网络搭建

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

在这里插入图片描述
拉伸后与全连接层FC进行连接,此时和DNN过程相同,要识别0-9数字,输出层用Softmax回归。
在这里插入图片描述
有关超参数调试的建议:
不要直接自己尝试参数,因为参数太多,尽量去选择文献中的优秀参数,选取别人任务中效果很好的架构去训练。
在这里插入图片描述

参数数量怎么计算?

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

在这里插入图片描述

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

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有什么优势?
卷积可以减少参数的数量!我们可以用更小的数据集训练,从而防止过拟合!
在这里插入图片描述

CNN仅仅需要更少的参数,而DNN需要相当大数量的参数。举个例子如下:
在这里插入图片描述
如果是用DNN的全连接方式,参数的数量是3072*4704=14M
那如果用CNN呢?每个过滤器25+1=26个参数,6个过滤器共156个参数(默认每个过滤器的各个通道拥有相同参数)
CNN可以使用更少的参数进行训练,就是因为参数共享,如果一个特征检测器(过滤器)可以检测某个部分垂直边缘,那么它也可以检测其他部分的垂直边缘。

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

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

三、整合CNN神经网络

在这里插入图片描述

  • 通过卷积层、池化层、全连接层搭建神经网络结构,最后通过Softmax回归输出预测值。
  • 计算代价函数J。
  • 通过梯度下降/动量梯度下降/RMSProp/Adam优化器对所有参数进行优化更新。
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值