CNN经典架构LeNet-5及参数调整
**
目录
**
1、传统LeNet-5网络实现
2、对LeNet-5网络进行修改,并注明修改原则
Create Wed May 2019.5.22 19:18
Update Tue Jun 2019-6-18 17:15:54(更新对LeNet-5网络的基本框架的修改,并对卷积过程中的个参数维度加以注释)
目前来说,深度学习、机器学习一直给人就是高深莫测的感觉。但是其实对于深度学习在计算机视觉方面的研究问题,目前来说其实就是对一些视频(帧信息)或图片任务实现分类识别,并且可以控制在一定的误差范围之内就达到了问题的目的。并且与其他对于图像分类任务的算法相对比的情况下,神经网络由于其具有较好的分类特性,所以成为了当之无愧的首选算法。
神经网络的前身就是感知机,但是之前感知机只能做做基础的一些任务,尤其是不能处理异或运算。所以研究人员就在考虑如何让计算机可以完成一些更为复杂的任务,所以在模拟人脑基础上的神经网络就被提出。当时由于神经网络的较为难解释性,并且训练也无法得到预想的实验结果,所以神经网络就沉寂了一段时间。但是当Hinton教授首次将误差反向传播引入之后,神经网络就焕发了新的生机。
感知机模型
其实看看深度学习的发展历史还是挺有趣的。如果对深度学习或者机器学习有兴趣的话,网上关于它们的介绍还是很多的,可以自行搜索。回归该博文的主题,LeNet-5网络。leNet-5网络于20世纪90年代由LeCun教授提出,当时只是用于对于银行手写字体的计算机识别任务。正是由于该网络的提出,直接引起了研究员对神经网络的研究,尤其是卷积神经网络(CNN),如果你看到这篇博文的话,你应该了解什么是CNN网络了,所以这里不加赘述。这里也不对LeNet-5的原始论文加以详述,因为网上这种博文较多,并且介绍的也大同小异,说得也还不错。这里只说明LeNet-5网络一共由5层构成:第一层-卷积、激活、最大值池化;第二层-卷积、激活、池化;后三层:全连接层。这里以Tensorflow为基础,实现对手写字体数据集MNIST进行识别分类,并给出最终的分类结果。这里着重针对分析Lenet-5网络中的各个参数的作用,以及如何对整个网络的参数进行调整。
这里先把卷积过程和池化过程先梳理一下:
1、卷积过程:
假设输入a = tf.constant([[1., 2., 2., 1.], [3., 2., 1., 1.], [2., 2., 1., 3.], [2., 1., 2., 1.]])
,其具体矩阵表示为
然后将其进行形状的转换,b = tf.reshape(a, [1, 4, 4, 1])
其转换后的矩阵为a.T可以理解为a的转置。再设滤波窗口为filter = tf.ones([1, 2, 2, 1])
其矩阵表示