使用Matlab神经网络工具箱

news2024/11/8 15:36:42

综述

在大数据和人工智能时代,深度学习是一种最为常见的数据分析和拟合工具。本报告以常用分析软件Matlab为例,介绍如何通过编写代码实现一个简单的CNN卷积神经网络。

Step 1: 打开matlab,新建脚本

1、安装matlab 2018以上版本后,双击图标打开。

2、点击“编辑器”页面,点击左上角的“新建”-“脚本”

3、保存脚本到默认路径(建议不要改路径!!),起一个你喜欢的名字(例如CVhandWritingDigits)

Step 2: 读入数据

1、按照下图编写代码,读入数据

每写完一行代码,建议运行一下,确保没有错误,再往下写。

图中“…”表示这行代码太长了,要分开两行。一直到第二行出线“;”,代表这行代码完了。

“%”代表注释内容,可以不写上去。

运行后,没有报错,工作区出线这些变量和赋值,可以往下做了。

2、显示部分数据

运行后,得到下图结果

3、显示所有标签,及每个标签中的数据量

运行后,得到如下结果

4、查看图像的大小

运行后,得到如下结果

5、划分训练集和测试集

Step 3: 配置卷积神经网络

1、编写以下代码,配置CNN的每一层

2、设置模型训练的参数options

3、开始训练模型

运行后,弹出如下窗口,我们可以观看模型在训练过程中loss和accuracy的变化

最后在验证集的准确率上达到99.52%。

Step 4: 在验证集上进行验证

1、将验证集放在指定路径下,例如D盘根目录下。然后对验证集进行数据整理。

2、将训练好的模型,应用于验证数据集上。

运行代码后,得到如下结果。

同学们可以进行思考,为什么在训练时得到的准确率是99.62%,而此时在验证集上的验证集仅为60%

3、可视化结果

运行代码后,得到如下结果。

digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', ...
'nndatasets', 'DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
% 加载手写数字数据集,imageDatastore根据文件夹名称自动标记图像,
% 并将数据存储为imageDatastore对象
figure;
perm = randperm(10000, 20);
for i = 1:20
subplot(4, 5, i);
imshow(imds.Files{perm(i)})
end
countEachLabel(imds)
img = readimage(imds, 1);
size(img)
% 查看图像的大小,每个图像为28*28*1像素;1代表为黑白。
numTrainFiles = 750;
[imdsTrain, imdsTest] = splitEachLabel(imds, numTrainFiles, 'randomized');
% 将数据集划分为训练和测试数据集,随机选取每个标签中的750个图像放入训练集中,
% 测试集包含每个标签的剩余图像。
% 以下为设置CNN的各个层结构
layers = [
imageInputLayer([28 28 1]) % 图像输入层,指定输入图像的尺寸
convolution2dLayer(3, 8, 'Padding', 'same') 
% 8个大小为3*3的卷积核。padding为补0策略
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'stride', 2)
% 池化层,stride为步幅大小;本例中是2*2的池化层,步幅为2
convolution2dLayer(3, 16, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'stride', 2)
convolution2dLayer(3, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'stride', 2)
fullyConnectedLayer(10) % 全连接层。输出大小为10,对应10个标签
softmaxLayer % softmax作为最后一层的分类器
classificationLayer
];
options = trainingOptions('sgdm', ... % 随机梯度下降
'InitialLearnRate', 0.01, ... % 学习率
'MaxEpochs', 4, ... % epoch为整个训练数据集的完整训练周期
'Shuffle', 'every-epoch', ...
'ValidationData', imdsTest, ... % 测试集
'ValidationFrequency', 30, ...
'Verbose', false, ...
'Plots', 'training-progress'); % 查看训练过程
net = trainNetwork(imdsTrain, layers, options); % 开始训练
save 'CSNet.mat' net % 保存结果
mineSet = imageDatastore('D:\hw22\hw22\', 'FileExtensions', '.jpg', ...
'IncludeSubfolders', false); % 指定验证集的位置,是一套新的数据
mLabels = cell(size(mineSet.Files, 1), 1); % 标记数据
for i = 1:size(mineSet.Files, 1)
[filepath, name, ext] = fileparts(char(mineSet.Files{i}));
mLabels{i, 1} = char(name);
end
mLabels2 = categorical(mLabels);
mineSet.Labels = mLabels2;
[YPred, probs] = classify(net, mineSet); % 利用训练好的模型,预测验证集的标签
YValidation = mineSet.Labels;
accuracy = sum(YPred == YValidation) / numel(YValidation) % 计算验证集的准确率
figure; % 画图,在验证集中随机挑10张,把真值和预测值标出来
nSample = 10;
ind = randperm(size(YPred, 1), nSample);
for i = 1:nSample
subplot(2, fix((nSample + 1) / 2), i)
imshow(char(mineSet.Files(ind(i))))
title(['PRE' char(YPred(ind(i)))])
if char(YPred(ind(i))) == char(YValidation(ind(i)))
xlabel(['PRE:' char(YValidation(ind(i)))], 'Color', 'b')
else
xlabel(['PRE:' char(YValidation(ind(i)))], 'color', 'r')
end
end

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

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

相关文章

【系统设计——认证授权——基本概念知识】

1. 认证和授权的区别 Authentication(认证) 是验证您的身份的凭据(例如用户名/用户 ID 和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authenticat…

区块链技术入门:以太坊智能合约详解

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术入门:以太坊智能合约详解 区块链技术入门:以太坊智能合约详解 区块链技术入门:以太…

【Spring】更加简单的将对象存入Spring中并使用

前言 本期讲解:通过Controller、Service、Repository、Component、Configurtion类注解、Bean方法注解,来更加简单的在Spring中存与读对象。 目录 1. 类注解 1.1 通过标签 1.2 使用类注解 1.3 什么是类注解 1.4 获取Bean对象命名问题 2. 方法注解 …

Vue(JavaScript)读取csv表格并求某一列之和(大浮点数处理: decimal.js)

文章目录 想要读这个表格,并且求第二列所有价格的和方法一:通过添加文件输入元素上传csv完整(正确)代码之前的错误部分因为价格是小数,所以下面的代码出错。如果把parseFloat改成parseInt,那么求和没有意义…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

人保财险(外包)面试分享

前言: 这是本月面的第三家公司,太难了兄弟们,外包都不好找了,临近年底,金九银十已经错过了,金三银四虽然存在,但按照这几年的行情,金九银十和金三银四其实已经是不复存在了&#xf…

【D3.js in Action 3 精译_039】4.3 D3 面积图的绘制方法及其边界标签的添加

当前内容所在位置: 第四章 直线、曲线与弧线的绘制 ✔️ 4.1 坐标轴的创建(上篇) 4.1.1 D3 中的边距约定(中篇)4.1.2 坐标轴的生成(中篇) 4.1.2.1 比例尺的声明(中篇)4.1…

美国大选——极具典型的可视化案例!GISer学起来

有人说可视化技术有啥意义,不就做个大屏么? 那真的小看了,就如下图这个美国大选来看,这么复杂混乱的信息,可视化技术给你梳理的明明白白的,简单、直观、形象、便于记忆。 让用户能够从繁杂信息中快速抓到重…

使用PyQt5设计一个简易计算器

目录 设计UI图 代码 结果展示 设计UI图 代码 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox from untitled import Ui_MainWindow import sysclass…

数据结构-数组(稀疏矩阵转置)和广义表

目录 1、数组定义 1)数组存储地址计算示例①行优先②列优先 2)稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3)十字链表结构定义 2、广义表定义 1)基本操作①GetHead②GetT…

cooladmin使用整理

1、后端关键字自动生成没有代码段提示,原因是拉取的项目代码中没有.vscode文件夹,复制一套至项目src同级即可 2、前端快速创建,在Entity完成后就去快速创建中选数据结构,这时没有对应的内容,数据结构是和controller层a…

Java 网络编程(一)—— UDP数据报套接字编程

概念 在网络编程中主要的对象有两个:客户端和服务器。客户端是提供请求的,归用户使用,发送的请求会被服务器接收,服务器根据请求做出响应,然后再将响应的数据包返回给客户端。 作为程序员,我们主要关心应…

Jmeter命令监控CPU等指标

JMeter 命令行执行脚本得到的报告中,是没有CPU、内存使用率等监控数据的,但是可以使用JMeter插件帮忙。 一、下载jmeter-plugins-manager.jar 下载后将文件放到jmeter安装包lib/ext目录下。打开Jmeter》菜单栏》选项》Plugins Manager 二、安装PerfMon…

ES + SkyWalking + Spring Boot:日志分析与服务监控(三)

目录 一、搭建SkyWalking 1.1 版本选择 1.2 下载安装 1.3 配置启动 1.4 SkyWalking UI介绍 二、Springboot项目使用 2.1 Agent下载 2.2 Agent配置skywalking oap地址 2.3 IDEA配置Agent地址 2.4 生成的ES索引介绍 三、在kibana上查看日志 四、问题和解决 3.1 日志…

如何快速搭建一个spring boot项目

一、准备工作 1.1 安装JDK:确保计算机上已安装Java Development Kit (JDK) 8或更高版本、并配置了环境变量 1.2 安装Maven:下载并安装Maven构建工具,这是Spring Boot官方推荐的构建工具。 1.3 安装代码编辑器:这里推荐使用Inte…

spring-第十三章 AOP

spring 文章目录 spring前言1.AOP介绍2.AOP七大术语3.切点表达式4.使用spring的AOP4.1概述4.2准备工作4.3基于注解方式使用AOP4.3.1准备目标类和目标方法4.3.2编写配置类4.3.3编写通知类4.3.4编写测试类4.3.5通知类型4.3.6切面的先后顺序4.3.7PointCut注解通用切点 4.4基于XML方…

jmeter常用配置元件介绍总结之安装插件

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之安装插件 1.下载插件2.安装插件管理包3.不用插件管理包,直接官网插件下载安装 1.下载插件 jm…

MySQL 多数据库备份与恢复,包括查询,函数,SP

一、备份语句: mysqldump 可以用来导出单个数据库、多个数据库,甚至所有数据库的数据。以下是导出多个数据库到指定文件位置的语法和具体案例。 基本语法 mysqldump -u [username] -p[password] --databases [db1] [db2] ... > [file_path] -u: …

contenteditable实现需要一个像文本域一样的可编辑框

我这里是因为左上和右下有一个固定的模板,所有用textarea有点不方便,查了下还有一个方法可以解决就是在需要编辑的元素上加上 :contenteditable"true" 完整代码如下,因为这个弹窗是两用的,所以用messageType做了一下判…

linux 安装anaconda3

1.下载 使用repo镜像网址下载对应安装包 右击获取下载地址,使用终端下载 wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh2.安装 使用以下命令可直接指定位置 bash Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /home/anaconda3也…