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,一经查实,立即删除!

相关文章

【shell script】

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

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…

Android文件路径获取

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

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

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

REGX52.H报错

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

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

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

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

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

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

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

昇思学习打卡-3-张量Tensor

本章节系统的学习了张量的相关内容,张量是由若干个当坐标系改变时满足转换关系的分量组成的集合。它是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。是一种类似于矩阵的特殊的数据结构。包括 创建张量的方式;张量的属性&#…

解决:使用MySQL Command Line Client时光标不显示

问题描述: 使用MySQL Command Line Client时,命令行输入字符光标不显示, 如下图: 解决办法: 1.按Shift键将输入法切换至中文,打出中文: 2.再按一次Shift键,光标就会显示:

工作助手VB开发笔记(1)

1.思路 1.1 样式 样式为常驻前台的一个小窗口,小窗口上有三到四个按钮,为一级功能,是当前工作内容的常用功能窗口,有十个二级窗口,为选中窗口时的扩展选项,有若干后台功能,可选中至前台 可最…

antd+vue——实现table组件跨页多选,已选择数据禁止第二次重复选择

需求场景:点击【新增】按钮可以在分页弹窗中跨页多选选择数据后添加到页面中,再次点击【新增】,已经选择过的数据则置灰不让重复选择。 选择后,置灰 点击【确定】数据添加到页面中,可再次点击【新增】进行添加数据 …

项目上线文档编写指南

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Ollama + Docker + AnythingLLM 搭建本地多用户AI知识库

整个过程需要准备三个工具: Ollama: 用于运行本地大模型的管理:llama3, qwen2等 Docker:用于运行AnythingLLM。 AnythingLLM:知识库运行平台,提供知识库构建及运行的功能。 Ollama, Docker 这二个安装不…

等保测评——云计算测评项2

安全计算环境-身份鉴别 当远程管理云计算平台中设备时,管理终端和云计算平台之间应建立双向身份验证机制; 远程管理云计算平台中的设备时,双向身份验证机制确保了管理终端和对端服务器的真实性,有效防止了重放攻击和DoS攻击,大大…

CGLib动态代理技术

基于CGLib的动态代理机制,ProxyFactoryy无需再像JDK动态代理那样实现一个interface,实际情况下可能这个interface并不存在,只需要实现另外一个接口MethodInterceptor即可 package com.hmdp.service.尚硅谷的代理模式3; //CGlib代理import …

AI大模型深度学习:理论与应用全方位解析

背景 在当前技术环境下,AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法,AI大模型学习能够不断提升模型的准确性和效率,为人类生活和工作带来更多…

Xilinx FPGA:vivado实现乒乓缓存

一、项目要求 1、用两个伪双端口的RAM实现缓存 2、先写buffer1,再写buffer2 ,在读buffer1的同时写buffer2,在读buffer2的同时写buffer1。 3、写端口50M时钟,写入16个8bit 的数据,读出时钟25M,读出8个16…