主要内容

创建简单的深度学习网络分类

这个例子展示了如何创建和训练一个简单的卷积神经网络用于深度学习分类。卷积神经网络是深度学习的重要工具,尤其适用于图像识别。

该示例演示了如何:

  • 加载和探索图像数据。

  • 定义网络架构。

  • 指定培训选项。

  • 培训网络。

  • 预测新数据的标签并计算分类精度。

有关如何交互式地创建和训练简单的图像分类网络的示例,请参见使用深度网络设计器创建简单的图像分类网络

加载和浏览图像数据

加载数字样本数据作为图像数据存储。imageDatastore根据文件夹名称自动标记图像,并将数据存储为ImageDatastore对象图像数据存储使您能够存储大型图像数据,包括内存中不适合的数据,并在卷积神经网络训练期间高效地读取图像批次。

digitDatasetPath = fullfile (matlabroot,“工具箱”“内特”“nndemos”...“数据集”“DigitDataset”);imd = imageDatastore (digitDatasetPath,...“包含子文件夹”,真的,“LabelSource”“foldernames”);

在数据存储中显示一些图像。

图;烫= randperm(10000年,20);I = 1:20 subplot(4,5, I);imshow (imds.Files{烫发(i)});结束

计算每个类别中的图像数。labelCount是一个包含标签和具有每个标签的图像数的表。数据存储包含1000个图像,每个数字为0-9,总共10000个图像。您可以将网络最后一个完全连接的层中的类数指定为OutputSize论点。

labelCount=countEachLabel(imds)
labelCount=10×2表标签计数(0 1000 1 1000 2 1000 3 1000 4 1000 5 1000 6 1000 7 1000 8 1000 9 1000

必须指定网络输入层中图像的大小。请检查网络中第一个图像的大小digitData.每个图像为28×28×1像素。

img=读取图像(imds,1);大小(img)
ans=1×228日28日

指定培训和验证集

将数据划分为训练数据集和验证数据集,使训练集中的每个类别包含750幅图像,验证集包含每个标签的剩余图像。拆分标签将数据存储digitData存入两个新的数据存储,列车数字数据valDigitData

numTrainFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imd, numTrainFiles“随机”);

定义网络体系结构

定义卷积神经网络结构。

层=[imageInputLayer([28 1])卷积层(3,8,“填充”“相同”)batchNormalizationLayer reluLayer MaxPoolig2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”)batchNormalizationLayer reluLayer MaxPoolig2dLayer(2,“步”,2)卷积2层(3,32,“填充”“相同”) batchNormalizationLayer relullayer fulllyconnectedlayer (10) softmaxLayer classificationLayer];

图像输入层一个imageInputLayer是指定图像大小的位置,在本例中,图像大小为28×28×1。这些数字对应高度、宽度和通道大小。数字数据由灰度图像组成,因此通道大小(颜色通道)为1。对于彩色图像,通道大小为3,对应于RGB值。您不需要对数据进行洗牌,因为列车网络,默认情况下,会在训练开始时打乱数据。列车网络还可以在训练期间在每个历元开始时自动洗牌数据。

卷积层在卷积层,第一个参数是过滤,这是训练函数在沿着图像扫描时使用的过滤器的高度和宽度。在本例中,数字3表示过滤器大小为3 × 3。您可以为过滤器的高度和宽度指定不同的大小。第二个参数是过滤器的数量,numFilters,这是连接到同一输入区域的神经元数量。此参数确定特征映射的数量。使用“填充”将填充添加到输入特征映射的名称-值对。对于默认步幅为1的卷积层,“相同”填充确保空间输出大小与输入大小相同。还可以使用的名称-值对参数定义该层的步幅和学习速率convolution2dLayer

批处理规范化层批处理归一化层将通过网络传播的激活和梯度归一化,使网络训练成为一个更容易的优化问题。在卷积层和非线性层(如ReLU层)之间使用批处理归一化层,以加快网络训练并降低对网络初始化的敏感性。使用batchNormalizationLayer创建批处理标准化层。

ReLU层批处理归一化层之后是一个非线性激活函数。最常见的激活函数是整流线性单元(ReLU)。使用reluLayer创建一个ReLU层。

最大池层卷积层(带激活函数)有时,下采样操作会减少特征地图的空间大小,并删除冗余空间信息。下采样可在不增加每层所需计算量的情况下,增加更深卷积层中的过滤器数量。下采样的一种方法是使用max pooling,您可以使用maxPooling2dLayer.最大池化层返回输入矩形区域的最大值,由第一个参数指定,poolSize。在此示例中,矩形区域的大小为[2,2]。矩形区域的“步”名称-值对参数指定训练函数沿输入扫描时所接受的步长。

全连通层卷积层和下采样层之后是一个或多个完全连接层。顾名思义,完全连接层是指神经元与前一层的所有神经元相连的一层。这一层结合了前一层在整个图像中学习到的所有特征,以识别更大的模式。最后一层是全连接层,结合特征对图像进行分类。因此,OutputSize参数等于目标数据中的类数。在本例中,输出大小为10,对应于10个类。使用fullyConnectedLayer创建一个完全连接的层。

Softmax层softmax激活功能使完全连接层的输出正常化。softmax层的输出由正数组成,正数相加为一,然后可由分类层用作分类概率。使用软MaxLayer在最后一个完全连接的层之后运行。

分类层最后一层是分类层。该层使用softmax激活函数为每个输入返回的概率将输入分配给互斥类之一并计算损失。要创建分类图层,请使用classificationLayer

指定培训选项

定义网络结构后,指定训练选项。使用随机梯度下降与动量(SGDM)训练网络,初始学习率为0.01。设置最大周期数为4。epoch是整个训练数据集上的一个完整的训练周期。在培训期间,通过指定验证数据和验证频率来监控网络的准确性。每个纪元都洗牌数据。该软件在训练数据上对网络进行训练,并在训练期间定期计算验证数据的准确性。验证数据不用于更新网络权重。打开训练进度图,并关闭命令窗口输出。

选项=培训选项(“sgdm”...“初始学习率”,0.01,...“MaxEpochs”4....“洗牌”“every-epoch”...“验证数据”imdsValidation,...“ValidationFrequency”30岁的...“冗长”假的,...“阴谋”“训练进步”);

使用训练数据训练网络

使用定义的体系结构训练网络、培训数据和培训选项。默认情况下,列车网络如果GPU可用,则使用GPU,否则使用CPU。GPU上的培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU版万博1manbetx本支持(并行计算工具箱).属性也可以指定执行环境“ExecutionEnvironment”的名称-值对参数trainingOptions

培训进度图显示了小批损失和准确性以及验证损失和准确性。有关培训进度图的更多信息,请参见监控深度学习训练进展.损失是交叉熵损失。准确率是网络正确分类图像的百分比。

网= trainNetwork (imdsTrain层,选项);

验证图像分类和计算精度

利用训练后的网络预测验证数据的标签,并计算最终验证精度。准确率是网络正确预测标签的比例。在本例中,超过99%的预测标签与验证集的真实标签匹配。

YPred =分类(净,imdsValidation);YValidation = imdsValidation.Labels;= sum(YPred == YValidation)/numel(YValidation)
精度= 0.9988

另请参阅

|||

相关的话题