本文是对经典论文“Gradient-Based Learning Applied to Document Recognition”的阅读笔记之一,主要介绍LeNet的结构以及参数个数的计算,结合“DeepLearning for Computer Vision with Python starter bundle”所介绍的原理和实验所写。笔者才疏学浅,还望指教。
一、理论部分
LeNet首次出现是在1998年的论文中,基于梯度的学习应用于文档识别[19]。 正如论文的名称所暗示的那样,作者实施LeNet背后的动机主要是光学字符识别(OCR)。LeNet架构简单明了(在内存占用方面很小),非常适合学习CNN的基础知识。在本章中,我们将寻求在1998年的论文中复制类似于LeCun的实验。 我们首先回顾一下LeNet架构,然后使用Keras实现网络。 最后,我们将在MNIST数据集上评估LeNet的手写数字识别。
先上两张结构图:
LeNet架构由两个系列的CONV => TANH => POOL层集组成,后跟一个完全连接的层和softmax输出。
- input: 在原始的架构中,神经网络的输入是一张
的灰度图像,不过这里我们选用的dataset是cifar10,是RGB图像,也就是
噢
- conv1: 第一层是一个卷积层啦,卷积核(kernel size)大小
,步长(stride)为
,不进行padding哦,所以刚才的输入图像,经过这层后会输出6张
的特征图(feature map)
- maxpooling2: 接下来是一个降采样层,用的是maxpooling哦,stride为
, kernel size为
,恩,所以很明显subsampling之后,输出6张
的feature map哦
- conv3: 第三层又是一个卷积层,kernel size和stride均与第一层相同噢,不过最后要输出16张feature map哦
- maxpooling4:第四层,恩,又是一个maxpooling
- fc5:对,第五层开始就是全连接(fully connected layer)层了哦,把第四层的feature map摊平,然后做最直白的举证运算哦,输入是120个结点
- fc6:输出是84个结点哦
- output:我们的dataset是cifar10,刚好也是10类哦,所以就是接一个softmax分成10类哦