深度学习理论篇之 ( 十三) -- LetNet-5之风起云涌

科普知识

对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(underfitting)。

回顾

犹记深度学习理论篇最近的一篇文章分享了降维之池化,从那以后我们就开始了深度学习实战TensorFlow的分享,按照之前的进度,分享完池化后差不多卷积神经网络的基础模块就结束了,于是让大家走进实战去了解整个神经网络的搭建和训练,如此便可让大家从基础到整体,从底层到上层有了一个总体轮廓。从今天起,我们正式回归理论篇的分享,之前也说过深度学习的理论一直在发展,因此,理论篇和实战篇可能永远都不会结束,基础模块分享完之后,我们首先从卷积神经网络的一些经典论文开始分享,然后去进行实战操作,愿各位不虚此行。

一、LetNet-5

本期文章,我们分享经典卷积神经网络的开山之作LetNet-5网络,该神经网络架构由LeCun在1998年提出,用于识别手写数字。那会估计都没几个知道有深度学习这东西的时候,人家就已经提出来了,而且效果较传统方法非常之不错,从那以后,各路大神横空出世,各路卷积神经网络风起云涌,逐渐演变成了今天的万物皆AI的现状。

LetNet-5 论文名:Gradient-Based Learning Applied to Document Recognition。

放几张论文图:

1.LetNet-5 网络结构图

以上就是LetNet-5的网络结构图,从图中我们可以看到输入的是一张手写的英文字母A,随后经过进了卷积层-下采样-卷积层-下采样-全连接层-全连接层,最终输出该输入图片属于每个数字的概率,实际测试的时候取最大概率值的索引值为最终预测值。

最终识别效果图如下所示:

网络解析

1.输入层:一张原始图像,其shape为1*32*32,代表是灰度图(单通道),图像大小为32*32.

2.卷积层1:

输入:1*32*32

卷积核大小:5*5

卷积核个数:6

步长:默认为1

输出特征图大小:32-5+1 =28 ,即 28*28

输出特征图shape:6*28*28 代表6个28*28的特征图,6课理解为28*28大小的特征图有6个通道。

3.下采样层1:

     采样方式:平均池化

输入:6*28*28

采样区域:2*2

步长:默认为1

输出特征图大小:28/2 = 14,即14*14

输出特征图shape:6*14*14

4.卷积层2:

输入:6*14*14

卷积核大小:5*5

卷积核个数:16

步长:1

输出特征图大小:14-5+1=10,即10*10

输出特征图shape:16*10*10

5.下采样2:

采样方式:平均池化

输入:16*10*10

采样区域:2*2

步长:默认为1

输出特征图大小:10/2 = 5,即5*5

输出特征图shape:16*5*5

6.卷积层3:

输入:16*5*5

卷积核大小:5*5

卷积核个数:120

步长:1

输出特征图大小:5-5+1=1,即1*1

输出特征图shape:120*1*1

7.全连接层1:

输入:120*1*1等效于120

输出神经元:84

输出特征图shape:84

8.全连接层2:

输入:84

输出神经元:10

输出特征图shape:10

至此,一张图像经过LetNet-5网络后就变成了一个长度为10的向量。训练的时候,就会将这10个值传入到loss函数中计算当前的loss大小,随后进行反向传播。

在实际测试的时候,会将这十个值的向量经过一个softmax函数,得到每一个值的概率,值越大,概率越大,概率之和为1。

总结

LetNet-5是第一个真正意义上的卷积神经网络,它是当前神经网络的开山鼻祖,由于当时的计算机技术发展缓慢,其在涉及之初就考虑到了参数大小的影响,因此整个网络具有非常简洁,参数量小,训练速度快等优点。

结语

本期分享就到这里了,今天的知识很简单,主要分析了网路的构造和每一层的维度大小,理论讲完,就趁热打铁,下期文章,我们将会用TensorFlow进行实战,编写LetNet-5网络用语手写数字识别,敬请期待,学有余力的老铁们可以提前尝试哦。

周末愉快,下期再见!

过去的时光里,我们都做了啥:

  1. 【年终总结】2021,辞旧迎新再出发

  2. 【年终总结】辞旧迎新,2020,我们再出发

编辑:玥怡居士|审核:小圈圈居士

往期推荐

01

深度学习理论篇之 ( 十二) -- 降维之池化

02

深度学习理论篇之 ( 十一) -- 卷积神经网络之风云盛世(三)

03

深度学习理论篇之 ( 十) -- 卷积神经网络之风云盛世(二)

扫码关注我们

IT进阶之旅

在看你就赞赞我

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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神经网络的核心
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值