主要内容

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

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

这个例子演示了如何:

  • 加载和探索图像数据。

  • 定义网络体系结构。

  • 指定培训选项。

  • 培训网络。

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

为一个例子,演示如何交互式地创建和训练一个简单的图像分类网络,看到的创建简单的图像分类网络使用深层网络设计师

加载和探索图像数据

加载数字样本数据作为图像数据存储。imageDatastore自动标签图像基于文件夹的名字和存储数据作为ImageDatastore对象。图像数据存储可以存储大量图像数据,包括数据,并不适合在内存中,有效地阅读批图像卷积神经网络在训练。

digitDatasetPath = fullfile (matlabroot,“工具箱”,“nnet”,“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

显示的图像数据存储。

图;烫= randperm(10000年,20);i = 1:20次要情节(4、5、我);imshow (imds.Files{烫发(i)});结束

计算图像的数量在每个类别。labelCount是一个表,其中包含标签和图像的数量在每个标签。数据存储包含1000张图片的每个数字0 - 9,总共10000张图片。您可以指定类的数量在过去的完全连接层的网络OutputSize论点。

labelCount = countEachLabel (imd)
labelCount =10×2表标签数_____ _____ 0 1000 1000 1000 1000 1000 4 1000 5 6 1000 7 1000 1000 1000 9

您必须指定大小的图像在网络的输入层。检查第一图像的大小digitData。28-by-28-by-1每个图像像素。

img = readimage (imd, 1);大小(img)
ans =1×228日28日

指定训练集和验证集

将数据分为训练和验证数据集,这样每个类别的训练集包含750张图片,和验证集包含剩余的图像从每个标签。splitEachLabel将数据存储digitData成两个新的数据存储,trainDigitDatavalDigitData

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

定义网络体系结构

定义了卷积神经网络架构。

层= [imageInputLayer ([28 28 1]) convolution2dLayer (3 8“填充”,“相同”)batchNormalizationLayer reluLayer maxPooling2dLayer (2“步”2)convolution2dLayer(16日“填充”,“相同”)batchNormalizationLayer reluLayer maxPooling2dLayer (2“步”32岁的,2)convolution2dLayer (3“填充”,“相同”)batchNormalizationLayer reluLayer fullyConnectedLayer (10) softmaxLayer classificationLayer];

图像输入层一个imageInputLayer是你指定图像大小,在这种情况下,28-by-28-by-1。这些数字对应的高度、宽度和通道的大小。数字数据由灰度图像,所以通道大小(颜色通道)是1。对于彩色图像,通道尺寸是3,对应于RGB值。因为你不需要洗牌数据trainNetwork开始时,默认情况下,打乱数据的训练。trainNetwork还可以自动洗牌数据在每一个时代的开始训练。

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

批归一化层批规范化标准化层激活和梯度通过网络传播,使网络训练一个更简单的优化问题。使用批量卷积层之间的归一化层和非线性,如ReLU层,加快网络训练和减少对网络初始化。使用batchNormalizationLayer创建一个批处理标准化层。

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

马克斯池层卷积层(激活函数)有时,后跟一个采样下来操作,减少了空间的大小特征地图和删除多余的空间信息。采样下来可以增加过滤器在更深的卷积层的数量不增加每层所需的计算量。采样下来的一种方法是使用max池,你创建使用maxPooling2dLayer。马克斯池层返回矩形区域的最大值的输入,由第一个参数指定,poolSize。在这个例子中,矩形区域的大小(2,2)。的“步”名称-值对的步长参数指定的训练函数,因为它扫描输入。

完全连接层卷积和采样下来层是紧随其后的是一个或多个完全连接层。顾名思义,一个完全连接层是一层的神经元连接到所有的神经元在前面的层。这一层由前层结合学到的所有特性在图像识别更大的模式。最后一个完全连接层结合了特征对图像进行分类。因此,OutputSize在过去的完全连接层参数等于目标数据的类的数量。在这个例子中,相对应的输出大小10,10类。使用fullyConnectedLayer创建一个完全连接层。

Softmax层将softmax激活函数可实现完全连接的输出层。的输出将softmax层包括正数和一个,然后可以用作分类概率的分类层。创建一个softmax层使用softmaxLayer函数后完全连接层。

分类层最后一层是分类层。这一层使用返回的概率将softmax激活函数为每个输入指定的输入到一个互斥类和计算损失。创建一个分类层,使用classificationLayer

指定培训选项

定义网络结构后,指定培训选项。列车网络使用随机梯度下降势头初步学习速率为0.01个。时代的最大数量设置为4。一个时代是一个完整的培训周期在整个训练数据集。监控网络在训练精度通过指定验证数据和验证的频率。混乱的数据每一时代。训练数据训练网络的软件和计算精度验证数据期间定期培训。验证数据不是用于更新网络权重。打开培训进展情节,关闭命令窗口的输出。

选择= trainingOptions (“个”,“InitialLearnRate”,0.01,“MaxEpochs”4“洗牌”,“every-epoch”,“ValidationData”imdsValidation,“ValidationFrequency”30岁的“详细”假的,“阴谋”,“训练进步”);

使用训练数据训练网络

使用定义的架构培训网络、训练数据训练选项。默认情况下,trainNetwork使用GPU如果是可用的,否则,它使用一个CPU。培训在GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU的金宝app支持版本(并行计算工具箱)。您还可以指定使用的执行环境“ExecutionEnvironment”名称-值对的观点trainingOptions

培训进度图显示了mini-batch损失和准确性和验证损失和准确性。培训进展阴谋的更多信息,见监测深度学习培训的进展。损失是叉损失。精度图像网络的比例是正确分类。

网= trainNetwork (imdsTrain层,选项);

验证图像进行分类和计算精度

预测验证数据使用的标签训练网络,并计算最终验证的准确性。准确性是标签的一部分网络预测正确。在这种情况下,超过99%的预测标签匹配的标签验证集。

YPred =分类(净,imdsValidation);YValidation = imdsValidation.Labels;精度= (YPred = = YValidation) /元素个数之和(YValidation)
精度= 0.9988

另请参阅

|||

相关的话题