LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一,是一种用于手写体字符识别的非常高效的卷积神经网络。 自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。
LeNet-5 中的5代表卷积核的尺寸。
可以看到LeNet-5结构 共有7层,其中包括3层卷积层,2层池化层,2层全连接层。
1、 INPUT-输入层
接收数据32 * 32 大小的图像数据,此层传统上不算LeNet-5的网络层次结构
2、 C1 卷积层
输入: 32 * 32
卷积核大小: 5 * 5
卷积核个数: 6
输出featuremap大小:28 * 28 (32-5+1)=28
输出数量为:6
连接数:(5 * 5 + 1)* 6 * 28 * 28
对输入图像进行第一次卷积运算(使用 6 个大小为 55 的卷积核),得到6个C1特征图(6个大小为2828的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为55,总共就有6(55+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的55个像素和1个bias有连接,所以总共有1562828=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。
C1层共有26x6=156个训练参数,有(5x5+1)x28x28x6=122304个连接
3、 S2 池化层(下采样层)
输入: 28 * 28
采样区域 : 2 * 2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,得到结果通过sigmoid 函数
采样种类:6
输出featuremap大小: 14 * 14 (28/2)
输出数量为:6
连接数:(2 * 2 + 1)* 6 * 14 * 14
S2层共有5x6=30个训练参数,有5x14x14x6=5880个连接个连接
4、 C3 卷积层
输入: 14 * 14
卷积核大小: 5 * 5
卷积核个数: 16
输出featuremap大小:10 * 10 ( 14 - 5 + 1)= 10
输出数量为:16
训练参数:6 * ( 3 * 5 * 5 + 1) + 6 * ( 4 * 5 * 5 + 1) + 3 * ( 4 * 5 * 5 + 1 ) + 1 * ( 6 * 5 * 5 + 1)=1516
为什么从6个特征图得到16个特征图?如何理解!
首先从 6 * ( 3 * 5 * 5 + 1) 看
卷积核个数为16, 前6个卷积核分别跟S2对应的相邻的3个特征图做运算
如 0号卷积核跟 0-1-2 特征图做运算 , 1号卷积核跟 1-2-3 特征图做运算,依次类推…
其次,在第二轮中,
6 * ( 4 * 5 * 5 + 1)
卷积核个数为16, 第二轮6个卷积核分别跟S2对应的相邻的4个特征图做运算
如 0号卷积核跟 0-1-2-3 特征图做运算 , 1号卷积核跟 1-2-3-4 特征图做运算,依次类推…
依次类推…
最后得到 151600个连接数
5、 S4 池化层(下采样层)
输入: 10 * 10
采样区域 : 2 * 2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,得到结果通过sigmoid 函数
采样种类:16
输出featuremap大小: 5 * 5 (10/2)
输出数量为:16
连接数:16 * 5 * 5
S2层共有5x16=90个训练参数,有5x14x14x6=5880个连接个连接
6、 C5 卷积层
输入: 5 * 5
卷积核大小: 5 * 5
卷积核个数: 120
输出featuremap大小:1 * 1 (5-5+1)=1
输出数量为:120
连接数:120 *(16 * 5 * 5 + 1)=48120
7、 F6 全连接层
输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
F6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,该层的训练参数和连接数都是(120 + 1)x84=10164
8、 Output 层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,如果节点i的输出值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
yi的值由i的比特图编码(即参数Wij)确定。yi越接近于0,则标明输入越接近于i的比特图编码,表示当前网络输入的识别结果是字符i。该层有84x10=840个设定的参数和连接。
以上是LeNet-5的卷积神经网络的完整结构,共约有60,840个训练参数,340,908个连接。一个数字识别的效果如图所示:
python实现mnist-LeNet5预测代码