【MATLAB+深度学习】LeNet-5改进版minist手写数字识别完整简明步骤及源码注释,不用费心配环境

本文介绍了LeNet-5的基本原理,包括卷积、池化和全连接层的作用,以及如何在MATLAB中使用minist数据集进行训练。详细展示了如何设计和编程一个改进版LeNet-5,涉及数据预处理、网络结构定义、训练和测试过程。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、LeNet-5简要原理
  • 二、LeNet-5详细原理与MATLAB编程过程(完整程序于本节末)
    • 1.导入minist数据集
    • 2.设计改进版LeNet-5结构
    • 3、部署训练
    • 4、训练网络
    • 5、测试网络
    • 完整程序(最好安装MATLAB最新版本、有GPU)
  • 三、补充对某初学者疑问的回答
    • 问题1、卷积核是怎么设置的?
    • 问题2、为什么一定要有非线性激活函数


前言

  在上一篇神经网络发展大事记中,我们已经知道了1998年的经典卷积神经网络LeNet-5实现了手写数字识别,非常适合初学者入门学习,而MATLAB又自带minist数据集、配备了强大的库(许多初学者光是配环境就卡很久)。
本篇仅使用一个MATLAB脚本来完成题目,并结合程序介绍相关原理。


提示:以下是本篇文章正文内容,下面案例可供参考

一、LeNet-5简要原理

如果恰好有10个特征能映射0~9个数字,就能直接完成分类。但实际上对机器来说并不能这样一步到位,而是从初级的特征,比如像素在空间上的轮廓分布:(图为LeNet-5结构示意图)
LeNet-5示意图
然后再到点的有规律分布,比如:“横”、“竖”、“撇”、“捺”这些高级特征,再到这些高级特征的组合形成更高级的特征来识别数字。卷积神经网络,可以很好地胜任逐层级的特征学习任务。
  输入层:输入图像。
  卷积层:提取特征。6个不同的卷积核就能提取6种特征。
  池化层:减轻运算、协助学习。
  再次卷积并池化,得到更高级的特征。
  全连接层:将前层特征展成1维向量,向量中被激活的分量组成最高级特征。
  softmax层:接受向量输入,输出每个类别的概率分布。

二、LeNet-5详细原理与MATLAB编程过程(完整程序于本节末)

1.导入minist数据集

  minist数据集是一个开源的经典的手写数字数据集,包含了6w个训练样本和1w个测试样本,每个样本都是28x28的灰度图(0~9),常用于训练和测试图像分类算法。MATLAB自带的
代码如下(示例):

%% 步骤 1: 导入数据集

folderPath = 'E:\matlabR2023b\toolbox\nnet\nndemos\nndatasets\DigitDataset';
imds = imageDatastore(folderPath, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');

  你电脑上安装的MATLAB也会自带这个数据集,替换成你电脑的路径上去即可。imageDatastore命令帮助导入图像数据。其中,IncludeSubfolders指定包含子文件夹,LabelSource设置为’foldernames’则将文件夹名作为标签。

然后可以选择抽查其中的一部分图片:

figure,
numImages=10000;
perm=randperm(numImages,20);
for i=1:1:20
    subplot(4,5,i);
    imshow(imds.Files{
   perm(i)});
end

运行后如下:
随机20张图片
为了训练与测试,需要将导入的数据集imds划分为训练集和测试集:

[imdsTrain, imdsTest] = splitEachLabel(imds, 0.8, 'randomize');

  splitEachLabel命令用于分割数据集为训练集和测试集,0.8表示训练集占80%,剩余的为测试集。

2.设计改进版LeNet-5结构

  基于LeNet-5的网络模型稍作改进,使用的网络结构(analyzeNetwork(net);即可绘制之)如下:
在这里插入图片描述
  如图,我们设计了比LeNet-5(提出于1998年)改进的网络,使用了ReLu激活函数(提出于2011年),并再卷积后进行了批归一化可以帮助正规化卷积提取的特征,这样做有助于网络的后续层更加稳定和快速地学习。省略批归一化层可能会导致训练过程不稳定,收敛速度慢,甚至无法收敛。
  许多初学者听说过激活函数、激活值。狭义上的激活值是被激活函数处理后的输出结果,同时也往往是下一层神经元的输入。如果没有激活函数的激活值,就是线性的。
这个表中有一竖着的栏为“激活”,这里的激活是只一层神经元的输出,之所以叫“激活”,是因为模仿生物学上神经元兴奋,兴奋就是被激活了,这一栏的内容是激活值矩阵(即每一层的输出值)。比如输入层imageinput的“激活”这一栏为28(S)x28(S)x 1(C) x1(B),这是因为输入灰度图像尺寸为28x28,灰度的通道(channel)=1,如果是RGB则其通道数为3。
  通道是初学者需要掌握的基础概念,简而言之,1个通道1个特征用1个卷积核。通道就是数据中表示某类特征信息的维度,每个通道都可以看作专注于提取一类特征的检测器。
续上一节,源码如下:

% 步骤 2: 定义LeNet网络结构
% 需事先安装MATLAB深度学习工具箱,特别是Deep Learning Toolbox
layers = [
    imageInputLayer([28 28 1], 'Name', 'input')

    convolution2dLayer(5, 6, 
  • 55
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值