主要内容

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

此示例显示如何为深度学习分类创建和培训一个简单的卷积神经网络。卷积神经网络是深度学习的必备工具,特别适用于图像识别。

该示例演示了如何:

  • 加载和探索图像数据。

  • 定义网络架构。

  • 指定培训选项。

  • 训练网络。

  • 预测新数据的标签并计算分类准确性。

有关如何互动创建和培训简单图像分类网络的示例,请参阅使用深网络设计器创建简单的图像分类网络

加载和探索图像数据

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

digitdatasetpath = fullfile(matlabroot,'工具箱''nnet''nndemos'......'nndatasets''digitdataset');imds = imageageataStore(DigitDatasetPath,......'insertumbfolders',真的,'labelsource''foldernames');

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

数字;perm = randperm(10000,20);为了我= 1:20子图(4,5,i);imshow(imds.files {perm(i)});结尾

计算每个类别中的图像数量。labelCount.是包含标签和具有每个标签的图像数量的表。数据存储区为每位0-9中的每位0-9个图像,总计10000张图像。您可以在网络的最后完全连接图层中指定类的类数输出争论。

labelcount = counteanceLabel(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 = ReadImage(IMDS,1);尺寸(IMG)
ans =.1×228 28.

指定培训和验证集

将数据划分为培训和验证数据集,以便培训集中的每个类别包含750个图像,验证集包含来自每个标签的剩余图像。spliteachlabel.拆分数据存储digitdata.进入两个新数据存储,TrainDigitdata.valdigitdata.

numtrainfiles = 750;[IMDStrain,IMDSValidation] = SpliteachLabel(IMDS,NumTrainfiles,'随机化');

定义网络架构

定义卷积神经网络架构。

图层= [imageInputlayer([28 28 1])卷积2dlayer(3,8,'填充''相同的')BatchnormalizationLayer Ruilulayer MaxPooling2dlayer(2,'走吧',2)卷积2dlayer(3,16,'填充''相同的')BatchnormalizationLayer Ruilulayer MaxPooling2dlayer(2,'走吧',2)卷积2dlayer(3,32,'填充''相同的')BatchnormalizationLayer Rublayer全连接列(10)SoftMaxLayer分类层];

图像输入层一个imageInputlayer.是您指定图像大小的位置,在这种情况下是28×28-1。这些数字对应于高度,宽度和信道大小。数字数据由灰度图像组成,因此通道大小(颜色通道)为1.对于彩色图像,通道大小为3,对应于RGB值。您不需要将数据进行洗牌,因为Trainnetwork.,默认情况下,在培训开始时将数据洗牌。Trainnetwork.在培训期间,还可以自动在每个时期的开头播放数据。

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

批量归一化层批量归一化层将通过网络传播的激活和渐变标准化,使网络培训更容易优化问题。在卷积层和非线性(如Relu层)之间使用批量归一化层,以加速网络训练并降低对网络初始化的敏感性。用BatchnormalizationLayer.创建批量归一化层。

Relu层批量归一化层之后是非线性激活函数。最常见的激活功能是整流的线性单元(Relu)。用抵押者创建Relu层。

最大汇集层卷积层(具有激活函数)有时之后是下抽样操作,其减少了特征图的空间大小并消除了冗余空间信息。下式采样使得可以增加更深的卷积层中的过滤器的数量,而不增加每层所需的计算量。一个下抽样方式使用了最大池,您可以创建使用maxpooling2dlayer.。最大池池层返回由第一个参数指定的输入的矩形区域的最大值,池化。在该示例中,矩形区域的大小是[2,2]。这'走吧'名称 - 值对参数指定培训函数沿输入扫描的步长。

完全连接的层卷积和下采样层之后是一个或多个完全连接的层。当其名称表明时,完全连接的层是神经元连接到前一层中的所有神经元的层。该层组合了通过图像中的前一层学到的所有特征,以识别更大的模式。最后一个完全连接的图层组合了分类图像的功能。因此,这是输出最后一个完全连接的图层中的参数等于目标数据中的类数。在该示例中,输出大小为10,对应于10类。用全康统计层创建完全连接的图层。

Softmax层Softmax激活功能将完全连接图层的输出标准化。Softmax层的输出包括施加到一个的正数,然后可以用分类层用作分类概率。使用该制作Softmax层softmaxlayer.在最后一个完全连接的图层后的函数。

分类层最终层是分类层。此图层使用SoftMax激活功能返回的概率,每个输入将输入分配给一个互斥的类别并计算丢失。要创建分类层,请使用分类层

指定培训选项

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

选项=培训选项('sgdm'......'italllearnrate',0.01,......'maxepochs',4,......'洗牌''每个时代'......'vightationdata',imdsvalidation,......'验证职业',30,......'verbose',错误的,......'plots''培训 - 进步');

使用培训数据列车网络

使用由架构定义的架构列车层数,培训数据和培训选项。默认,Trainnetwork.如果一个可用的GPU,则使用GPU,否则,它使用CPU。GPU培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetxGPU通万博1manbetx过发布支持(并行计算工具箱)。您还可以使用使用指定执行环境'executionenvironment'名称 - 值对参数培训选项

培训进度图显示了迷你批量损失和准确性以及验证损耗和准确性。有关培训进度情节的更多信息,请参阅监测深度学习培训进度。损失是跨熵损失。准确性是网络正确分类的图像的百分比。

net = trainnetwork(Imdstrain,图层,选项);

分类验证图像并计算精度

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

ypred =对(net,imdsvalidation)分类;yvalidation = imdsvalidation.labels;准确性= SUM(YPRED == YValidation)/ Numel(YValidation)
精度= 0.9988.

也可以看看

|||

相关话题