LeNet-5网络解读及代码实现

本文详细介绍了LeNet-5网络,它在手写数字识别中的应用以及其在卷积神经网络发展中的重要地位。文章通过分析LeNet-5的结构特点,包括局部感受野、共享权重和空间子抽样,揭示了其对处理图像识别任务的优势。此外,还提供了使用Keras实现LeNet-5的Python代码示例。
摘要由CSDN通过智能技术生成

一、介绍

    LeNet-5被大规模用于自动分类美国银行支票上的手写数字。该网络是一种卷积神经网络(CNN)。CNNs是现代最先进的基于深度学习的计算机视觉基础。这些网络建立在三个主要思想之上:局部感受野(local receptive fields)、共享权重( shared weights )和空间子抽样(spacial subsampling)。具有共享权重的局部感受野是卷积层的本质,下面描述的大多数结构以一种或另一形式使用卷积层。

    LeNet之所以是一个重要的体系结构,另一个原因是在LeNet发明之前,字符识别主要是通过手工特征工程来完成的,其次是机器学习模型来学习如何对手工特征进行分类。LeNet使得手工工程特征变得多余,因为网络自动从原始图像中学习最佳的内部表示。

二、卷积神经网络

    在传统的模式识别任务中,通常需要先人工设计特征抽取方法,从输入变量中消除不相关的变量,然后构造特征,再使用一个分类器方法进行分类。在这种情况下,全连接的多层神经网络作为分类器使用。但是,我们也可以依赖算法自己学习特征抽取的部分。以字符识别为例,我们可以以几乎原始的输入数据来作为网络的输入。但是这也有一些问题:

    首先,一般来说图片都是比较大的,一个图片通常都有好几百个变量(像素)。假如神经网络的第一层有100个神经元。那么这里就已经有数以万计的权重了。这么大的参数数量需要更复杂的系统,更多的训练集样本。此外,这么多的参数也需要更多的内存,这就已经让一些机器无法使用了。但是,最主要的问题还是这样的网络不能处理不同输入的情况。在输入到神经网络固定大小的的第一层之前,输入的图像必须是标准大小,且是图像的正中间(也就是输入的图像需要比较正式,不能偏差太大)。不幸的是,并没有一个完美的预处理方法可以达到这样的效果。因为输入的图像一般不是很正规的图像,大小、位置甚至是风格都不同。当然,如果网络足够大,这样的有较大差别的图像也是可以处理的,只是这需要很大的网络,目前这样的网络无法训练。

    其次,全连接网络也会忽视输入的拓扑特征。输入变量可以以任何顺序呈现,但却不影响输出。但实际上,图像有很强的局部特征:那些相近的变量具有很强的相关性。局部相关性也就是为什么在识别空间或者时间相关的目标的时候,先抽取并联合局部特征可以提升效果。因为相邻的变量可以被分到一个相同的小类别中。

    卷积网络联

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
LeNet-5神经网络 C源代码,这个写的比较好,可以用gcc编译去跑,结合理论可以对深度学习有更深刻的了解 介绍 根据YANN LECUN的论文《Gradient-based Learning Applied To Document Recognition》设计的LeNet-5神经网络,C语言写成,不依赖任何第三方库。 MNIST手写字符集初代训练识别率97%,多代训练识别率98%。 DEMO main.c文件为MNIST数据集的识别DEMO,直接编译即可运行,训练集60000张,测试集10000张。 项目环境 该项目为VISUAL STUDIO 2015项目,用VISUAL STUDIO 2015 UPDATE1及以上直接打开即可编译。采用ANSI C编写,因此源码无须修改即可在其它平台上编译。 如果因缺少openmp无法编译,请将lenet.c中的#include和#pragma omp parallel for删除掉即可。 API #####批量训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 inputs: 要训练的多个图片对应unsigned char二维数组的数组,指向的二维数组的batchSize倍大小内存空间指针。在MNIST测试DEMO中二维数组为28x28,每个二维数组数值分别为对应位置图像像素灰度值 resMat:结果向量矩阵 labels:要训练的多个图片分别对应的标签数组。大小为batchSize batchSize:批量训练输入图像(二维数组)的数量 void TrainBatch(LeNet5 *lenet, image *inputs, const char(*resMat)[OUTPUT],uint8 *labels, int batchSize); #####单个训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 要训练的图片对应二维数组 resMat:结果向量矩阵 label: 要训练的图片对应的标签 void Train(LeNet5 *lenet, image input, const char(*resMat)[OUTPUT],uint8 label); #####预测 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 输入的图像的数据 labels: 结果向量矩阵指针 count: 结果向量个数 return 返回值为预测的结果 int Predict(LeNet5 *lenet, image input, const char(*labels)[LAYER6], int count); #####初始化 lenet: LeNet5的权值的指针,LeNet5神经网络的核心
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

despacito,

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

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

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

打赏作者

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

抵扣说明:

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

余额充值