Python计算机视觉编程 - LeNet卷积模型实现Mnist手写体训练

本文介绍了使用Python和Tensorflow进行Mnist手写体数据库训练,详细解析了LeNet-5模型的原理,包括卷积层、下采样层和全连接层的工作方式。通过训练,模型在package训练集上的准确率超过90%,但在处理某些图像时可能出现误识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要
1.看mnist数据库特点
2.LeNet-5原理
3.数值化结果

1.mnist数据库特点

MNIST数据集是一个手写数字数据集,每一张图片都是0到9中的单个数字。
MNIST数据库的来源是两个数据库的混合,一个来自Census Bureau employees(SD-3),一个来自high-school students(SD-1);有训练样本60000个,测试样本10000个。训练样本和测试样本中,employee和student写的都是各占一半。60000个训练样本一共大概250个人写的。训练样本和测试样本的来源人群没有交集。MNIST数据库也保留了手写数字与身份的对应关系。我们可以使用Tensorflow提供的input_data.py 脚本来加载数据集。

2.LeNet-5原理

2.1、简介

卷积神经网络是一种特殊的多层神经网络,像其它的神经网络一样,卷积神经网络也使用一种反向传播算法来进行训练,不同之处在于网络的结构。卷积神经网络的网络连接具有局部连接、参数共享的特点。局部连接是相对于普通神经网络的全连接而言的,是指这一层的某个节点只与上一层的部分节点相连。参数共享是指一层中多个节点的连接共享相同的一组参数。
LeNet-5正是卷积神经网络的一种。
在这里插入图片描述

2.2原理简述

LeNet一共有7层(不包括输入层)
输入层:
输入图像的大小为3232,这要比mnist数据库中的最大字母(2828)还大。
作用: 图像较大,这样做的目的是希望潜在的明显特征,比如笔画断续,角点等能够出现在最高层特征监测子感受野的中心。
其他层:
C1,C3,C5为卷积层,S2,S4为降采样层,F6为全连接层,还有一个输出层。
每一个层都有多个Feature Map(每个Feature Map中含有多个神经元),输入通过一种过滤器作用,提取输入的一种特征,得到一个不同的Feature Map。如下图所示:
在这里插入图片描述

2.3、各层详解

卷积运算的优点:通过卷积运算,可以使原信号特征增强,并且降低噪声。
卷积对于二维图像中的效果就是:对于图像中的每个像素邻域求加权和得到该像素点的输出值。
在这里插入图片描述

  1. C1卷积层
    ● C1 是一个卷积层,由6个Feature Map组成。 每一个Feature Map中的每个神经元与输入中55的区域相连(也就是Filter的大小),Feature Map的大小为2828,
    ● C1一共有156个参数,因为55个参数加上一个bias,一共又有6个Filter,所以为:(55+1)6=156,一共有156(28*28) = 122304个连接。

  2. S2 下采样层(Pooling)
    下采样的作用: 利用图像的局部相关性原理,对图像进行子抽样,可以减少数据处理量,同时又保留有用的信息。
    同样的,有61414, 6个Feature Map。
    池化层一般有两种方式:
    ● (1) Max_Pooling: 选择Pooling窗口中最大值最为采样值
    ● (2) Mean_Pooling: 将Pooling窗口中的所有值相加取平均,然后以平均值最为采样值。
    说明:
    每个单元的22的感受野()并不重叠,因此S2中每一个Feature Map的大小为C1中Feature Map中大小的1/4。行列各位1/2。所以,S2有12个可训练的参数和5880个连接。个人感觉,5880是这么来的,Filter的大小为:22,一个偏差bias,6个Feature Map,则可训练参数个数为:(22+1)6 = 30,连接数为:30(1414)= 5880
    12 则为: 6个2*2的小方块,加上一个bias,为(1+1)*6=12

    卷积过程中,用一个可训练的过滤器fx去卷积一个输入图像,然后添加一个偏置bx ,得到卷积层Cx 。子采样过程就是:每个邻域4个像素变为一个像素,然后加上标量Wx 加权,最后再增加偏置bx+1 ,接着通过一个sigmoid激活函数,产生一个大概缩小了4倍的特征映射图Sx+1。

  3. C3层 卷积层
    同样的,Filter大小认为55,去卷积S2,得到的Feature Map为1010大小。每一个Feature Map中包含1010个神经元。C3层有16个不同的Filter,所以会得到16个不同的Feature Map。
    C3中的每一个Feature Map连接到S2的所有6个Feature Map或者是几个Feature Map。表示本层的Feature Map是上一层提取的Feature Map的不同组合。为什么不把S2的每一个Feature Map连接到S3的每一个Feature Map中?原因有2: 第一,不完全连接机制连接的数量保持在合理范围,第二,这样破坏了网络的对称性,由于不同的Feature Map有不同的输入,所以迫使他们抽取不同的特征(理想状态特征互补)。
    如果:C3的前6个Feature Map以S2中的3个相邻的Feature Map子集为输入,接下来的6个Feature Map以S2中相邻的4个Feature Map作为输入,接下来的3个以不相邻的4个Feature Map子集作为输入,最后一个将S2中所有的Feature Map作为输入的话,C3将会有1516个可训练参数和151600个连接。
    因为6
    (325+1) + 6(425+1) + 3(425+1) + 1(625+1) = 1516。连接数为:15161010=151600。

  4. S4层 Pooling层
    由16个55的Feature Map组成,Feature Map中每个单元与C3中相应的Feature Map的22邻域相连。
    S4有32个可训练的参数和2000个连接
    同S2,(1+1)16=32. 连接数为: (22+1) 16 * 55 = 2000

  5. C5 卷积层
    这一层有120个Feature Map,每个单元与S4层的全部的16个55的邻域相连。 S4的Feature Map的大小也是55,这一层的Filter大小也是55,所以,C5的Feature Map的大小为11。此时构成了S4与C5之间的全连接。但这里C5表示为卷积层而不是全连接层,是因为如果LeNet的输入变大,而其他保持不变,此时的Feature Map的大小就比11要大。
    C5有48120个可训练的链接: (5
    5*16 +1) *120 = 48120。

  6. F6 全连接层
    有84个单元(之所以是84是因为输入层的设计),F6计算输入向量和权重向量之间的点积,再加上一个偏置,最后将其传递给sigmoid函数产生一个单元i的一个状态。
    一共有10164个可训练的连接,为:84*(120+1)=10164。

  7. 输出层
    输出层由欧式径向基函数(Euclidean Radia

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值