63、基于深度学习网络的数字分类(matlab)

1、基于深度学习网络的数字分类的原理及流程

基于深度学习网络的数字分类是一种常见的机器学习任务,通常使用的是卷积神经网络(CNN)来实现。下面是其原理及流程的简要说明:

  1. 数据收集:首先,需要收集包含数字图像和对应标签的数据集,用于训练模型。

  2. 数据预处理:对数据集进行预处理,包括图像的缩放、灰度处理、归一化等,以便输入模型进行训练。

  3. 构建深度学习网络:使用卷积神经网络(CNN)来构建模型。CNN包含卷积层、池化层、全连接层等,用于学习特征并进行分类。

  4. 模型训练:将预处理后的数据输入到CNN模型中进行训练,通过反向传播算法优化模型参数,使模型能够准确地分类数字。

  5. 模型评估:使用测试集对训练好的模型进行评估,计算模型的准确率、精确率、召回率等指标,评估模型的性能。

  6. 模型应用:将训练好的模型用于数字图像分类任务,输入待分类的数字图像,模型输出对应的分类结果。

  7. 模型优化:根据评估结果对模型进行优化,如调整网络结构、调整超参数等,提高模型的分类性能。

总的来说,基于深度学习网络的数字分类主要包括数据收集、数据预处理、网络构建、模型训练、模型评估、模型应用和模型优化等步骤,通过不断学习和调优,使模型能够准确地分类数字图像。

2、基于深度学习网络的数字分类说明

1)程序流程

1创建和训练简单的卷积神经网络来进行深度学习分类

2加载和浏览图像数据。

3定义神经网络架构。

4指定训练选项。

5训练神经网络。

6预测新数据的标签并计算分类准确度。

3、加载和浏览图像数据

1)加载数据

说明

使用 imageDatastore 函数将位数数据加载为图像数据存储,并指定包含图像数据的文件夹。通过图像数据存储可以存储大图像数据,包括无法放入内存的数据,并在卷积神经网络的训练过程中高效分批读取图像。

代码

dataFolder = "DigitsData";
imds = imageDatastore(dataFolder, ...IncludeSubfolders=true, ...LabelSource="foldernames");

2) 显示数据存储中的部分图像

代码

figure(1)
tiledlayout("flow");
perm = randperm(10000,20);
for i = 1:20nexttileimshow(imds.Files{perm(i)});
end

视图效果

f8c8ad2ea3a041b5b79db79659c290cb.png

3) 计算每个类别中的图像数量

说明

数据存储包含数字 0-9 的总共 10000 个图像,每个数字对应 1000 个图像。您可以在神经网络的最后一个全连接层中指定类数作为 OutputSize 参量。

代码

classNames = categories(imds.Labels);
labelCount = countEachLabel(imds)
labelCount =10×2 tableLabel    Count_____    _____0      1000 1      1000 2      1000 3      1000 4      1000 5      1000 6      1000 7      1000 8      1000 9      1000 

4)检查 digitData 中第一个图像的大小

说明

每个图像的大小均为 28×28×1 像素

代码 

img = readimage(imds,1);
size(img)
ans =28    28

4、指定训练集和验证集

1)说明

将数据划分为训练数据集和验证数据集,以使训练集中的每个类别包含 750 个图像,并且验证集包含对应每个标签的其余图像。

splitEachLabel 将数据存储 imds 拆分为两个新的数据存储 imdsTrain 和 imdsValidation。

2)代码

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomize");

5、定义神经网络架构

1)说明

1 图像输入层 imageInputLayer 用于指定图像大小

在本例中为 28×28×1。这些数字对应于高度、宽度和通道大小。数字数据由灰度图像组成,因此通道大小(颜色通道)为 1。对于彩色图像,通道大小为 3,对应于 RGB 值。您不需要打乱数据,因为 trainnet 默认会在训练开始时打乱数据。trainnet 还可以在训练过程中的每轮训练开始时自动打乱数据。

2 卷积层在卷积层中,第一个参量是 filterSize,它是训练函数在沿图像扫描时使用的滤波器的高度和宽度。

第一个参量是 filterSize,它是训练函数在沿图像扫描时使用的滤波器的高度和宽度。在此示例中,数字 3 表示滤波器大小为 3×3。您可以为滤波器的高度和宽度指定不同大小。第二个参量是滤波器数量 numFilters,它是连接到同一输入区域的神经元数量。此参数决定了特征图的数量。使用 Padding 名称-值参量输入特征图进行填充。对于默认步幅为 1 的卷积层,"same" 填充可确保空间输出大小与输入大小相同。您也可以使用 convolution2dLayer 的名称-值参量定义该层的步幅和学习率。

3 批量归一化层批量归一化层对神经网络中的激活值和梯度传播进行归一化,使神经网络训练成为更简单的优化问题。

在卷积层和非线性部分(例如 ReLU 层)之间使用批量归一化层,来加速神经网络训练并降低对神经网络初始化的敏感度。使用 batchNormalizationLayer 创建批量归一化层。

4 ReLU 层批量归一化层后接一个非线性激活函数。

最常见的激活函数是修正线性单元 (ReLU)。使用 reluLayer 创建 ReLU 层。

5 最大池化层卷积层(带激活函数)有时会后跟下采样操作,以减小特征图的空间大小并删除冗余空间信息。

通过下采样可以增加更深卷积层中的滤波器数量,而不会增加每层所需的计算量。下采样的一种方法是使用最大池化,可使用 maxPooling2dLayer 创建。最大池化层返回由第一个参量 poolSize 指定的矩形输入区域的最大值。在此示例中,该矩形区域的大小是 [2,2]。Stride 名称-值参量指定训练函数在沿输入扫描时所采用的步长。

6 全连接层卷积层和下采样层后跟一个或多个全连接层。

该层将先前层在图像中学习的所有特征组合在一起,以识别较大的模式。最后一个全连接层将特征组合在一起来对图像进行分类。因此,最后一个全连接层中的 OutputSize 参数等于目标数据中的类数。在此示例中,输出大小为 10,对应于 10 个类。使用 fullyConnectedLayer 创建全连接层。

7 softmax 层 softmax 激活函数对全连接层的输出进行归一化。

softmax 层的输出由总和为 1 的多个正数组成,这些数字随后可被分类层用作分类概率。使用 softmaxLayer 函数在最后一个全连接层后创建一个 softmax 层。

2)代码实现

layers = [imageInputLayer([28 28 1])convolution2dLayer(3,8,Padding="same")batchNormalizationLayerreluLayermaxPooling2dLayer(2,Stride=2)convolution2dLayer(3,16,Padding="same")batchNormalizationLayerreluLayermaxPooling2dLayer(2,Stride=2)convolution2dLayer(3,32,Padding="same")batchNormalizationLayerreluLayerfullyConnectedLayer(10)softmaxLayer];

6、指定训练选项

1)说明

使用具有动量的随机梯度下降 (SGDM) 训练神经网络,初始学习率为 0.01。

将最大训练轮数设置为 4。一轮训练是对整个训练数据集的一个完整训练周期。

每轮训练都会打乱数据。

通过指定验证数据和验证频率,监控训练过程中的神经网络准确度。软件基于训练数据训练神经网络,并在训练过程中按固定时间间隔计算基于验证数据的准确度。验证数据不用于更新神经网络权重。

在图中显示训练进度并监控准确度

2)代码实现

options = trainingOptions("sgdm", ...InitialLearnRate=0.01, ...MaxEpochs=4, ...Shuffle="every-epoch", ...ValidationData=imdsValidation, ...ValidationFrequency=30, ...Plots="training-progress", ...Metrics="accuracy", ...Verbose=false);

7、使用训练数据训练神经网络

1)说明

使用 layers 定义的架构、训练数据和训练选项训练神经网络。

默认情况下,trainnet 使用 GPU(如果有),否则使用 CPU。

在 GPU 上训练需要 Parallel Computing Toolbox™ 和支持的 GPU 设备

训练进度图显示了小批量损失和准确度以及验证损失和准确度。损失是交叉熵损失。准确度是神经网络分类正确的图像的百分比。

2)代码实现

net = trainnet(imdsTrain,layers,"crossentropy",options);

3)视图效果 

75e02c7438634393a37b1c61e5a8d0c6.png

8、对验证图像进行分类并计算准确度

1)对测试图像进行分类

使用 minibatchpredict 函数对多个观测值进行预测

使用 scores2label 函数将预测分数转换为标签

minibatchpredict 函数自动使用 GPU(如果有)。否则,该函数使用 CPU。

2)代码实现

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

 3)计算分类准确度

准确度是正确预测的标签的百分比

4)代码实现

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)

9、总结

在Matlab中实现基于深度学习网络的数字分类通常涉及以下步骤:

  1. 数据准备:首先,你需要准备包含数字图像和对应标签的数据集。Matlab提供了数据存储和处理的功能,可以方便地加载和处理数据。

  2. 搭建深度学习网络:Matlab提供了深度学习工具箱(Deep Learning Toolbox),可以使用内置的函数和网络结构创建卷积神经网络(CNN)模型。你可以选择不同的网络结构,根据需要进行修改和调整。

  3. 数据预处理:在训练之前,需要对数据进行预处理,例如缩放、归一化、图像增强等。Matlab提供了丰富的图像处理函数和工具,可以帮助你进行数据预处理。

  4. 模型训练:使用准备好的数据集和搭建好的深度学习网络进行模型训练。你可以使用Matlab提供的训练函数,如trainNetwork,来进行模型训练,并监控训练进度和性能。

  5. 模型评估:在训练完成后,使用测试集对训练好的模型进行评估,计算模型的准确率、精确率、召回率等指标,评估模型的性能。

  6. 模型应用:将训练好的模型用于数字图像分类任务,输入待分类的数字图像,模型输出对应的分类结果。Matlab提供了方便的函数,可以用于模型的推理和预测。

  7. 模型优化:根据评估结果对模型进行优化,如调整网络结构、调整超参数等,提高模型的分类性能。

综上所述,利用Matlab实现基于深度学习网络的数字分类可以借助其强大的深度学习工具箱和图像处理功能,帮助用户快速搭建、训练和评估数字分类模型。

10、源代码

代码

%% 基于深度学习网络的数字分类
%创建和训练简单的卷积神经网络来进行深度学习分类
%加载和浏览图像数据。
%定义神经网络架构。
%指定训练选项。
%训练神经网络。
%预测新数据的标签并计算分类准确度。%% 加载和浏览图像数据
%使用 imageDatastore 函数将位数数据加载为图像数据存储,并指定包含图像数据的文件夹。通过图像数据存储可以存储大图像数据,包括无法放入内存的数据,并在卷积神经网络的训练过程中高效分批读取图像。
dataFolder = "DigitsData";
imds = imageDatastore(dataFolder, ...IncludeSubfolders=true, ...LabelSource="foldernames");%显示数据存储中的部分图像。
figure(1)
tiledlayout("flow");
perm = randperm(10000,20);
for i = 1:20nexttileimshow(imds.Files{perm(i)});
end
%计算每个类别中的图像数量。
%数据存储包含数字 0-9 的总共 10000 个图像,每个数字对应 1000 个图像。您可以在神经网络的最后一个全连接层中指定类数作为 OutputSize 参量。
classNames = categories(imds.Labels);
labelCount = countEachLabel(imds)%检查 digitData 中第一个图像的大小
%每个图像的大小均为 28×28×1 像素。
img = readimage(imds,1);
size(img)%% 指定训练集和验证集
%将数据划分为训练数据集和验证数据集,以使训练集中的每个类别包含 750 个图像,并且验证集包含对应每个标签的其余图像。
%splitEachLabel 将数据存储 imds 拆分为两个新的数据存储 imdsTrain 和 imdsValidation。
numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomize");%% 定义神经网络架构
%图像输入层 imageInputLayer 用于指定图像大小
%卷积层在卷积层中,第一个参量是 filterSize,它是训练函数在沿图像扫描时使用的滤波器的高度和宽度。
%批量归一化层批量归一化层对神经网络中的激活值和梯度传播进行归一化,使神经网络训练成为更简单的优化问题。
%ReLU 层批量归一化层后接一个非线性激活函数。
%最大池化层卷积层(带激活函数)有时会后跟下采样操作,以减小特征图的空间大小并删除冗余空间信息。
%全连接层卷积层和下采样层后跟一个或多个全连接层。
%softmax 层 softmax 激活函数对全连接层的输出进行归一化。
layers = [imageInputLayer([28 28 1])convolution2dLayer(3,8,Padding="same")batchNormalizationLayerreluLayermaxPooling2dLayer(2,Stride=2)convolution2dLayer(3,16,Padding="same")batchNormalizationLayerreluLayermaxPooling2dLayer(2,Stride=2)convolution2dLayer(3,32,Padding="same")batchNormalizationLayerreluLayerfullyConnectedLayer(10)softmaxLayer];
%% 指定训练选项
%使用具有动量的随机梯度下降 (SGDM) 训练神经网络,初始学习率为 0.01。
%将最大训练轮数设置为 4。一轮训练是对整个训练数据集的一个完整训练周期。
%每轮训练都会打乱数据。
%通过指定验证数据和验证频率,监控训练过程中的神经网络准确度。软件基于训练数据训练神经网络,并在训练过程中按固定时间间隔计算基于验证数据的准确度。验证数据不用于更新神经网络权重。
%在图中显示训练进度并监控准确度
options = trainingOptions("sgdm", ...InitialLearnRate=0.01, ...MaxEpochs=4, ...Shuffle="every-epoch", ...ValidationData=imdsValidation, ...ValidationFrequency=30, ...Plots="training-progress", ...Metrics="accuracy", ...Verbose=false);
%% 使用训练数据训练神经网络
%使用 layers 定义的架构、训练数据和训练选项训练神经网络。
%默认情况下,trainnet 使用 GPU(如果有),否则使用 CPU。
%在 GPU 上训练需要 Parallel Computing Toolbox™ 和支持的 GPU 设备
%训练进度图显示了小批量损失和准确度以及验证损失和准确度。损失是交叉熵损失。准确度是神经网络分类正确的图像的百分比。
net = trainnet(imdsTrain,layers,"crossentropy",options);
%% 对验证图像进行分类并计算准确度
%对测试图像进行分类。
%使用 minibatchpredict 函数对多个观测值进行预测
%使用 scores2label 函数将预测分数转换为标签
%minibatchpredict 函数自动使用 GPU(如果有)。否则,该函数使用 CPU。
scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);
%计算分类准确度
%准确度是正确预测的标签的百分比
TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)

工程文件

https://download.csdn.net/download/XU157303764/89496283

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为高斯数据库安装

这里主要在虚拟机上安装,选择openEuler系统。已经有很多博文介绍了虚拟机安装,直接推荐博文。 OpenEulerx虚拟机中安装 openEuler添加VMware-tools 数据库的安装也有详细博文推荐 OpenGauss数据库的详细安装 借花献佛,大家努力

【shell script】

文章目录 一、基础shell script二、脚本运行方式的差异三、判断式1.利用test命令2.利用判断符号[] 四、if,case语句1.if...then2.case...esac 五、函数function六、循环1.while和until循环2.for循环 一、基础shell script 在“shell”部分,那是在命令行…

【Oracle】Oracle常用语句大全

目录 创建/删除数据库创建/删除表其他表操作增加字段修改字段重命名字段删除字段 主键/索引/视图相关数据插入数据更新数据删除字段拼接merge into语法案例素材同时更新和插入记录同步错误 分页查询分组查询/筛选排序连接查询1. 内连接(INNER JOIN)&…

Flutter——最详细(Badge)使用教程

背景 主要常用于组件叠加上圆点提示; 使用场景,消息数量提示,消息红点提示 属性作用backgroundColor红点背景色smallSize设置红点大小isLabelVisible是否显示offset设置红点位置alignment设置红点位置child设置底部组件 代码块 class Badge…

从数据洞察到智慧决策:数字孪生技术在智慧水利中的应用实践,为水库管理提供强有力的数据支撑和智能分析

目录 一、引言 二、数字孪生技术的核心与原理 三、数字孪生技术在智慧水利中的应用场景 1、水库管理的挑战与需求 2、数字孪生水库管理系统的构建 四、数字孪生技术在水库管理中的具体应用案例 1、洪水预测与模拟 2、水资源配置与调度 3、大坝安全监测与评估 4、生态环…

【C++/STL深度剖析】stack和queue的详细概念和使用(图文详解,初学者必看!!)

目录 一、前言 二、stack 的详细解析 🔥 stack的介绍🔥 🔥 stack的构造🔥 🔥 stack的常用接口🔥 💧push 💧top 💧pop 💧empty 💧size…

C# Queue、List、LinkedList 性能对比

最近需要用到一个先进先出的缓存列队&#xff0c;对比了一下几个可能用的类的性能。。 向添加100w个数据&#xff0c;然后每次弹出100个&#xff0c;输出用时 Queue<int> q new Queue<int>();List<int> l new List<int>();LinkedList<int> ll…

确保跨平台自动化测试脚本的稳定运行:获取谷歌浏览器与ChromeDriver版本20240703

确保跨平台自动化测试脚本的稳定运行&#xff1a;获取谷歌浏览器与ChromeDriver版本 在自动化测试中&#xff0c;确保谷歌浏览器&#xff08;Google Chrome&#xff09;与ChromeDriver版本匹配至关重要&#xff0c;特别是跨平台&#xff08;Windows和Linux&#xff09;测试时。…

Android文件路径获取

文件存储相关的文档 文件存储相关的系列文档如下&#xff0c;可根据需要查看这些文档 Android文件路径获取 Android存储权限梳理及api接口调用 Android各种存储路径的比较 Android R及以上版本中APP外部存储实现 Android文件路径获取 在Android开发中&#xff0c;经常需要…

24位DAC转换的FPGA设计及将其封装成自定义IP核的方法

在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…

为什么除以n-1而不是n得到的样本方差是总体方差的无偏估计量

文章目录 前言具体的解释&#xff1a; 前言 在统计学中&#xff0c;我们通常使用样本方差来估计总体方差。样本方差的计算通常是将每个观测值与样本均值的差的平方和除以样本大小减去1&#xff0c;即 ( 1 n − 1 ∑ i 1 n ( x i − x ˉ ) 2 ) (\frac{1}{n-1} \sum_{i1}^{n}…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

源码扭蛋机开发初探

在软件开发的世界里&#xff0c;创新总是层出不穷。今天&#xff0c;我们将一起探讨一个有趣而富有创意的项目——源码扭蛋机。源码扭蛋机&#xff0c;顾名思义&#xff0c;就是将传统的扭蛋机概念与代码编程相结合&#xff0c;让开发者们在扭动的过程中随机获得各种有趣的、实…

【持续更新】App Inventor 2 中文网原创内容

App Inventor 2 中文网原创的技术文档&#xff0c;作品&#xff0c;技术文章&#xff0c;帖子&#xff0c;问答&#xff0c;技术指导&#xff0c;问题解决思路等。 基础知识 【连接调试】App Inventor 2 连接方式&#xff1a;AI伴侣、模拟器、USB【连接调试】Ai2 Starter模拟…

pip常用命令详解

pip 是 Python 的官方第三方包管理工具之一&#xff0c;其为 Python 包的安装与管理提供了极大的便利。本文将详细介绍 pip 的常见命令及其用法&#xff0c;帮助读者更好地利用这一强大的工具。 1. 安装 pip 在开始使用 pip 之前&#xff0c;确保您的系统中已经安装了 pip。p…

synchronized和volatile

synchronized synchronized关键字的作用&#xff1a; 在Java中&#xff0c;synchronized关键字用于确保多个线程在访问共享资源时的安全性。它通过获取对象的内置锁&#xff08;也称为monitor&#xff09;来实现同步&#xff0c;保证了同一时刻只有一个线程可以进入同步代码块或…

Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL

章节内容 上一节我们完成了&#xff1a; Reduce JOIN 的介绍Reduce JOIN 的具体实现DriverMapperReducer运行测试 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…

无人机在航拍领域有哪些独特优势?

那肯定是便宜啊&#xff0c;相比传统的飞机或直升机航拍作业&#xff0c;无人机航拍具有更快的响应速度和更低的成本。无人机可以随时随地进行起降&#xff0c;并在短时间内完成航拍任务&#xff0c;极大地提高了作业效率。同时&#xff0c;无人机的运营成本相对较低&#xff0…

Mac如何杀毒?Mac电脑如何杀毒 mac杀毒软件推荐 mac杀毒软件哪个好用

Mac的轻薄和便携是众多白领选择它作为办公PC的原因&#xff0c;而除此之外&#xff0c;Mac另一个被人选择的原因&#xff0c;是macOS 系统特有的安全性。因此许多人以为&#xff0c;Mac不需要安装专门的杀毒软件。然而事实并非如此&#xff01; 每年都会出现许多恶意软件准们针…

【C++中ord的作用】

ord(s[i]) - ord(0): ord()的意思时求一个字符的Ascii码。 因为程序里如果x时用字符读入的&#xff0c;不能把他当作数字运算&#xff0c;要转化为数字。 比如说“0”的Ascii码为48&#xff0c;"1"到“9”的Ascii码分别为49到57&#xff0c;所以ord&#xff08;‘…