经典神经网络学习笔记之LeNet(附带代码)

       本文是对经典论文“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输出。

                      图片来源:http://pyimg.co/ihjsx

  • input: 在原始的架构中,神经网络的输入是一张 32\times32 的灰度图像,不过这里我们选用的dataset是cifar10,是RGB图像,也就是 32\times32\times3 噢
  • conv1: 第一层是一个卷积层啦,卷积核(kernel size)大小 5\times5 ,步长(stride)为 1 ,不进行padding哦,所以刚才的输入图像,经过这层后会输出6张 28\times28 的特征图(feature map)
  • maxpooling2: 接下来是一个降采样层,用的是maxpooling哦,stride为 2 , kernel size为 2\times2 ,恩,所以很明显subsampling之后,输出6张 14\times14的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类哦

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神经网络的核心
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值