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:20
    nexttile
    imshow(imds.Files{perm(i)});
end

视图效果

f8c8ad2ea3a041b5b79db79659c290cb.png

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

说明

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

代码

classNames = categories(imds.Labels);
labelCount = countEachLabel(imds)
labelCount =

  10×2 table

    Label    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")
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2,Stride=2)
    
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2,Stride=2)
    
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    
    fullyConnectedLayer(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:20
    nexttile
    imshow(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")
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2,Stride=2)
    
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2,Stride=2)
    
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    
    fullyConnectedLayer(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.mfbz.cn/a/769915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

福利来了!MoneyPrinterPlus可以自动配置环境和自动运行了

之前开源了MoneyPrinterPlus,可以实现批量混剪视频,一键生成视频和自动发布视频的功能。 但是经常会看到小伙伴在安装过程中遇到很多问题。所以这篇文章的目的就是告诉大家怎么使用MoneyPrinterPlus的自动环境配置工具和自动启动工具。 让小白用户也能…

Elasticsearch集群部署(下)

目录 上篇:Elasticsearch集群部署(上)-CSDN博客 七. Filebeat 部署 八. 部署Kafka 九. 集群测试 链接:https://pan.baidu.com/s/1AFXSmDdY5xBb7g35ipKoaw?pwdfa9m 提取码:fa9m 七. Filebeat 部署 为什么用 F…

IDEA 一键部署Docker

以部署示例服务(sevnce-demo)为例。 配置服务器 地址、账号、密码根据实际情况填写 配置镜像仓库 地址、账号、密码根据实际情况填写 编写Dockerfile 在sevnce-demo根目录下右键,选择创建Dockerfile。 # 基础镜像 FROM sevnce-registry.c…

npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法

npm install puppeteer 报错如下: npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated. Use PUPPETEER_DOWNLOAD_BASE_URL instead. npm ERR! Error: ERROR: Failed to set up Chrome v126.0.6478.126! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to sk…

ORA-12170: TNS:连接超时

今天在oracle数据库搭建连接远程数据库的dbink时,发现搭建失败报错:ORA-12170: TNS:连接超时 但是是能够ping的通远程数据库地址的。 telnet 172.18.6.104 1522要求查看下创建dblink语句,也确认创建语句无误。 (DESCRIPTION (ADDRESS_LIST…

串级PID控制算原理及法详解

文章目录 1. PID 2. 串级PID 3. 串级PID的物理量 4. C语言实现单极PID 5. C语言实现串极PID 6. 模拟仿真 1. PID PID是应用最广泛的闭环控制方法之一,是一种常用的反馈控制方法,对于每个PID控制器由三个部分组成:比例控制(…

自然语言处理与Transformer模型:革新语言理解的新时代

引言 自然语言处理(NLP)是人工智能和计算机科学的一个重要分支,旨在使计算机能够理解、生成和处理人类语言。随着互联网和数字化信息的爆炸性增长,NLP在许多领域中的应用变得越来越重要,包括: 搜索引擎&am…

SCI丨一篇待投2区,计算机结合复合材料

题目:基于空间状态xxxx智能复合材料板的声辐射控制 期刊:2区 状态:准备提交 摘要:研究了xxxxx无限流体介质相互作用的有源声辐射的影响。

JAVA实现二分查找,斐波那契数列,深度优先搜索详情教程【包含代码】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

计算机网络 | 期末复习

物理层: 奈氏准则:带宽(w Hz),在不考虑噪音的情况下,最大速率(2W)码元/秒 信噪比S/N:以分贝(dB)为度量单位。信噪比(dB)…

ueditor集成秀米编辑器

ueditor集成秀米编辑器 一、背景二、集成秀米编辑器流程2.1、新增秀米插件的按钮,显示在我们的富文本编辑器上2.2、点击该按钮,可以呼出一个iframe,这个iframe引用的是秀米自己的编辑器页面2.3、要是有图片,需要再修改配置哈2.4、…

react ts 封装3D柱状图,支持渐变

留档,以防忘记 bar3D.tsx import React, { useEffect, useRef, useState } from react; import * as echarts from echarts; import echarts/lib/chart/bar; import echarts/lib/chart/pictorialBar; import echarts/lib/component/grid; import echarts/lib/comp…

HTML总结2

什么是HTML HTML(Hypertext Markup Language),超文本标记语言,(是一套标记标签,一般用来描述网页)。 HTML标签 HTML标记标签,通常被称为HTML标签,或者HTML标记。 标签…

VScode使用ssh连接服务器

VScode是一款有丰富插件的编译器,非常好用!除非你不会用,因为太过繁琐或着频繁出错导致想把电脑砸了; 插件选择 ssh 配置文件 Host myblablaHostName xxx.xx.xxx.xxxUser username用户名一般是服务器上创建有什么用户名&#xf…

【STM32】在标准库中使用DMA

1.MDA简介 DMA全称Direct Memory Access,直接存储区访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和…

seq2seq+Attention机制原理介绍

一、Seq2seq的局限性 Seq2seq(序列到序列)模型我们在前面讲了它的原理,是一种广泛用于处理序列转换任务的深度学习架构,特别是在机器翻译、文本摘要、对话生成等应用中。然而,尽管seq2seq模型在某些领域取得了显著的成…

使用 Python2.7 抓取 systrace 文件

为了排查安卓终端系统底层问题,需要抓取终端的systrace文件分析,下面是操作步骤: 1、安装python 2.7 2、打开cmd执行命令安装python包:pip install pypiwin32 3、解压six-1.16.0.tar.gz,进入目录用命令安装six&#xf…

《UDS协议从入门到精通》系列——图解0x84:安全数据传输

《UDS协议从入门到精通》系列——图解0x84:安全数据传输 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 Tip📌:本文描述中但凡涉及到其他UDS服务的,均提供专栏内文章链接跳转方式以便快速…

Stable Diffusion最强功能—— 图片背景完美替换

今天分享 Stable Diffusion 图片背景完美替换 功能,通过 Stable Diffusion 图生图重绘蒙版进行背景图的二次重绘。 在广告产品图、头像背景替换、图片后期处理等场景下用到的都很频繁。 整体步骤: 通过 removebg 插件实现图片主体蒙版的抠图 结合图生…

提升研发效能的67个技术点丨IDCF

在当今快速变化的市场环境中,企业要想保持竞争力,就必须不断提高研发效率。高效的研发不仅能够帮助企业快速响应市场需求,还能降低成本、提高产品质量。本文让我们一起来看一下,作为微软18年MVP的技术大咖徐磊老师,梳理…