ディープラーニング

深度学习的例子

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

从头训练模型

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

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

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

尽管数据很简单,正确的深度学习模型和训练选项,可以达到99%的准确率。那么我们如何创建一个模型,这将让我们呢?

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

1。访问数据

我们开始通过下载MNIST在MATLAB图像。数据存储在许多不同的文件类型。这个数据是存储为二进制文件,MATLAB可以很快使用和重塑成图像。
这行代码将读取原始二进制文件并创建一个数组的所有训练图像。

rawImgDataTrain = uint8(从文件中读(fid, numImg * numRows * numCols,“uint8”));%重塑数据部分为四维数组rawImgDataTrain =重塑(rawImgDataTrain [numRows numCols, numImgs]);imgDataTrain (:,:, 1, 2) = uint8 (rawImgDataTrain(:,:,(二));

我们可以检查数据的大小和类在命令窗口输入谁。

> >谁imgDataTrain名称大小字节类imgDataTrain 28 x28x1x60000 47040000 uint8

这些图片非常小,只有28 x 28个像素,总共有60000个训练图像。

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

2。创建和配置网络层

我们首先建立一个CNN,最常见的深度学习网络。

对美国有线电视新闻网

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

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

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

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

你可以了解更多关于所有这些层的文档。

3所示。培训网络

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

常用的培训方案

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

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

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

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

(' MaxEpoch ', 20)

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

Mini-batch大小

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

(' MiniBatchSize ', 64)

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

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

我们开始通过指定两个选择:情节进展,minibatch大小。

miniBatchSize = 8192;选择= trainingOptions (“个”,……“MiniBatchSize”,miniBatchSize,…“阴谋”,“训练进步”);网= trainNetwork (imgDataTrain、labelsTrain层,选择);

我们然后运行网络和监测其进展。

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

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

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

改变培训选项

首先,我们要调整学习速率。我们最初的学习速率远低于0.01的违约率。

“InitialLearnRate”, 0.0001

因此一个参数的改变,我们得到一个更好的result-nearly 99% !

对于某些应用程序,这个结果是令人满意的,但是你可能还记得,我们的目标是99%。

更改网络配置

从90%到99%需要更深层次的网络和许多轮的试验和错误。我们添加更多的层,包括批处理规范化层,这将有助于加快网络收敛(在这点上,它正确地响应新的输入)。

网络现在是“深”。这一次,我们将改变网络但是离开训练选项和以前一样。

网络训练后,我们测试它在10000的图像。

predLabelsTest = net.classify (imgDataTest);精度= (predLabelsTest = = labelsTest) /元素个数之和(labelsTest testAccuracy = 0.9913)

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

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


了解更多

跟随一个例子

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