深度学习的例子

探索深度学习的例子,并在MATLAB环境下学习如何开始。

从头训练模型

在本例中,我们想要训练卷积神经网络(CNN)来识别手写的数字。我们将使用的数据数字数据集,其中包含10000张图片的手写数字0 - 9。这是一个随机样本25手写数字的数字数据集:

通过使用一个简单的数据集,我们将能够覆盖所有深度学习工作流程中的关键步骤没有应对的挑战,如处理能力和数据集太大,适合到内存中。可以将这里描述的工作流应用到更复杂的深层次的学习问题和更大的数据集。

如果你是刚刚开始与应用深度学习,使用此数据集的另一个优势是,你可以训练它没有投资一个昂贵的GPU。

对于这个简单的数据集,使用正确的深度学习模型和训练选项,几乎可以达到100%的准确率。那么我们如何创建一个模型,这将让我们呢?

这将是一个迭代的过程中,我们建立在以前的训练结果找出方法训练问题。的步骤如下:

1。访问数据

我们首先加载到MATLAB数字图像。数据集存储在许多不同的文件类型。这个数据存储图像文件的集合。这行代码将创建一个数据存储的图像数据,帮助您管理图像文件。

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

检查第一个图片的大小。这些图片非常小,只有28 x 28个像素。

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

将数据分为训练和验证数据集,这训练集包含750张图片,验证集包含剩余的图像。

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

下一个任务将图像标签,但由于数字图像标签,我们可以跳过繁琐的步骤,迅速来构建我们的神经网络。

2。创建和配置网络层

我们首先建立一个CNN,深入学习网络的常见分类图像。

对美国有线电视新闻网

一个CNN的一个图像,通过它通过网络层,输出最后一个类。网络可以有几十或几百个层,每一层学习检测图像的不同特征。过滤器是用于每个训练不同分辨率的图像,和每个图像卷积的输出作为下一层的输入。金宝搏官方网站过滤器可以是非常简单的特性,增加亮度和边缘等复杂特性,独特定义对象的层次发展。

了解更多关于美国有线电视新闻网(CNN)的结构,观察:

因为我们从头训练CNN,我们必须首先指定哪些层,它将包含和顺序。

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

您可以了解更多关于这些层文档

3所示。培训网络

首先,我们选择培训选项。有许多可用的选项。表显示最常用的选项。

常用的培训方案

培训选项 定义 提示
情节的培训进展

情节展示了mini-batch损失和准确性。它包括一个停止按钮,可以让你在任何时候停止网络训练。

使用(情节=“训练进步”)绘制列车网络的进步。
马克思时代

一个时代的全部通过整个训练集训练算法。

(MaxEpoch = 20)

指定的时代,网络将训练的时间越长,但精度可以提高每个时代。

Mini-batch大小

mini-batch是训练数据集的一个子集,同时处理。

(MiniBatchSize = 64)

mini-batch越大,训练越快,但最大大小将取决于GPU内存。如果你得到一个内存错误当培训,减少mini-batch大小。

学习速率 这是一个主要的参数控制的速度训练。 较低的学习速率能给一个更准确的结果,但可能需要更长的时间来训练网络。

我们开始通过指定培训选项。然后,列车网络和监控培训的进展。

选择= trainingOptions(“个”,……InitialLearnRate = 0.1,……MaxEpochs = 2,…情节=“训练进步”);网= trainNetwork (imdsTrain层,选项);

4所示。检查网络的准确性

我们的目标是模型的准确性提高。随着网络列车,情节进展出现。

我们会尝试改变训练选项和网络配置。

改变培训选项

我们减少了最初的学习速率和增加时代的数量。

InitialLearnRate = 0.01 MaxEpocs = 4

改变这些参数的结果,我们得到一个更好的result-nearly 100% !

验证准确性

网络训练后,我们测试它的图像验证集。

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

现在我们知道准确的训练网络,我们现在可以用它来识别手写的信件在网络图片,甚至在视频直播。

更改网络配置

有时提高精度需要更深层次的网络和许多轮的试验和错误。我们可以添加更多的层,包括批处理规范化层,这将有助于加快网络收敛(在这点上,它正确地响应新的输入)。这将创建一个“深”网络。

从头开始创建一个网络时,你负责决定网络配置。这种方法给你最控制网络,并可以产生令人印象深刻的结果,但它需要了解神经网络的结构和层类型的许多选项和配置。


了解更多

跟随一个例子

学习如何训练卷积神经网络(CNN)来识别手写的数字。