使用Matlab神经网络工具箱

news/2024/11/8 15:22:40 标签: matlab, 神经网络, 开发语言

综述

在大数据和人工智能时代,深度学习是一种最为常见的数据分析和拟合工具。本报告以常用分析软件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.niftyadmin.cn/n/5744068.html

相关文章

前端将后端返回的文件下载到本地

vue 将后端返回的文件地址下载到本地 在 template 拿到后端返回的文件路径 <el-button link type"success" icon"Download" click"handleDownload(file)"> 附件下载 </el-button>在 script 里面写方法 function handleDownload(v…

2024年12月中国多场国际学术会议,EI检索录用!

2024年12月&#xff0c;多场国际学术会议将在中国多地召开&#xff0c;涵盖AI、机器人、大数据、网络安全、传感制造、环境工程、物联网等领域&#xff0c;促进学术交流&#xff0c;录用论文将EI检索&#xff0c;诚邀国内外专家参会。 第三届人工智能、人机交互和机器人国际学…

使用Python分析股票价格数据并计算移动平均线的实用指南

使用Python分析股票价格数据并计算移动平均线的实用指南 在金融市场中,移动平均线(Moving Average, MA)是一种常用的技术分析工具,用于平滑价格数据,帮助投资者识别趋势。本文将详细介绍如何使用Python分析股票价格数据,并计算移动平均线。我们将通过一个实际的案例来演…

数据结构---二叉树(顺序结构),堆(上)

树 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 PS 有⼀个特殊的结点&#xff…

three.js 使用精灵文字 spriteText

three.js 使用精灵文字 spriteText https://threehub.cn/#/codeMirror?navigationThreeJS&classifyapplication&idspriteText import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getEle…

如何找到捏蛋糕和修牛蹄类型的解压视频素材?

今天&#xff0c;我们来聊一个让人放松的话题——如何找到捏蛋糕和修牛蹄类型的解压视频素材。你是否也曾在抖音、快手上被这些视频吸引&#xff1f;它们确实让人倍感舒适。如果你也想制作这种类型的解压视频&#xff0c;下面我将推荐几个优秀的网站&#xff0c;帮助你快速找到…

正则表达式在Kotlin中的应用:提取图片链接

在现代的Web开发中&#xff0c;经常需要从网页内容中提取特定的数据&#xff0c;例如图片链接。Kotlin作为一种现代的编程语言&#xff0c;提供了强大的网络请求和文本处理能力。本文将介绍如何使用Kotlin结合正则表达式来提取网页中的图片链接。 正则表达式基础 正则表达式是…

mysql死锁查看和解决

文章目录 一、MySQL死锁排查1、查看正在进行中的事务2、查看正在锁的事务3、查看等待锁的事务4、查询是否锁表5、查看最近死锁的日志6、杀死死锁 本文是基于Mysql8.0进行讲解。 本文只讲解如何查询数据库中是否有死锁及死锁的解决&#xff0c;若想了解更多关于死锁的信息&…