%% 基于深度学习网络的数字分类
%创建和训练简单的卷积神经网络来进行深度学习分类
%加载和浏览图像数据。
%定义神经网络架构。
%指定训练选项。
%训练神经网络。
%预测新数据的标签并计算分类准确度。
%% 加载和浏览图像数据
%使用 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)
逼子歌
- 粉丝: 3585
- 资源: 41
最新资源
- bcprov-jdk15on-1.50.zi
- (7151648)记事本源代码
- 深入探讨HTTP协议的核心功能及其安全性解决方案
- 用digital实现D触发器
- 视频游戏检测30-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- 皮带滚筒式双向移载机sw12可编辑全套技术资料100%好用.zip
- fdjslkfjkldsjgkklfdg
- EMC整改过程分享+EMC测试项+EMC优化方案+EMC验证结果
- 瓶盖打码分拣机sw18可编辑全套技术资料100%好用.zip
- 牛奶激光打码夹持自动化设备sw18可编辑全套技术资料100%好用.zip
- 机器故障数据集.zip
- windows组策略组策略分享
- 气动真空上料机sw17全套技术资料100%好用.zip
- 谷物盒、牛奶纸箱、苏打水检测14-YOLO(v5至v11)、COCO、Paligemma数据集合集.rar
- proxy arp自动配置-打开-适用于openwrt
- 基于粒子群算法的配电网重构 基于IEEE33节点电网,以网损和电压偏差最小为目标,考虑系统的潮流约束,采用粒子群算法求解优化模型,得到确保放射型网架的配电网重构方案 这个程序主要是一个潮流计算程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈