本周文件交换选择

我们最好的用户反馈

深度学习教程系列

我们本周的客座文章是由约翰娜她选的是一本新书深度学习教程系列.这篇文章将介绍教程,一个关于深度学习的新视频系列,以及许多其他开始深度学习的链接。享受吧!

Avi在11行代码.如果你刚刚开始学习深度学习,我鼓励你先去看看:这是一篇很棒的文章,也是一种很好的开始方式。但让我们再深入一点.如果我们想创建自己的网络来识别,会发生什么呢新对象在图片?

File Exchange上的条目将为您提供3个示例:

  • 从头开始训练神经网络
  • 转移学习
  • 使用神经网络作为特征提取器


这三个例子旨在帮助您为数据创建自定义神经网络。而且,它们的代码不到125行……总!


这些示例使用来自CIFAR-10这是一个可供公众使用的相对较小(32 * 32像素)图像数据库。有一个文件叫做DownloadCIFAR10.m这将下载图像并将它们放入测试和训练文件夹。下载和提取这些图像需要一些时间,但您只需要运行一次。


如果您还没有准备好深入研究代码,或者如果您想要深度学习概述请查看我们关于神经网络的入门系列视频。这将有助于回答以下问题:
•什么是深度学习?
•什么是神经网络?
•机器学习和深度学习的区别是什么?

深度学习入门系列



所有的例子都需要大量的图像数据集。如果你是MATLAB的新手,你有很多数据-图像数据或其他-请查看ImageDatastore这是建立在数据存储为了更好地管理大量数据。


从头开始训练神经网络

我们将从头开始创建一个可以识别4类物体的神经网络。听起来吓人吗?神经网络只是一系列的层,每个层改变输入并将输出传递给下一层。这个图有助于可视化这个过程。



想要更深层次地理解cnn ?看看这个短视频,我们深入研究ConvNets的关键方面。

代码会给你一个预定义的神经网络作为开始,但是从头开始创建网络的概念意味着你可以自由地探索架构,并根据你认为合适的情况进行修改。这是一个以网络为例的机会,看看改变层如何影响准确性。在不做任何更改的情况下运行示例中的代码-您将看到准确率约为75%。你能找到进一步提高准确性的方法吗?


转移学习


迁移学习是一个半怪异的概念,你可以把别人完全成熟的网络,转移它所做的所有学习,来学习一组全新的对象。如果一个网络已经被输入了数百万张狗和猫的图像,并且可以准确地预测这些类别,那么它可能只需要几百张图像就可以学习一个新的类别,比如兔子。学习可以是转移到新的类别。就像视频中解释的那样,如果你的新识别任务与之相似,或者有相似之处,就会有所帮助相似的特征回到原来的类别。例如,在狗身上训练的网络可能非常适合相对快速地学习其他动物。


它也有帮助准确的网络这就是为什么我们将使用AlexNet来开始我们的例子,AlexNet是一个赢得2012年ILSVRC比赛的ConvNet。它已经在许多种动物身上进行了训练,既然我们想要识别狗、青蛙、猫和鹿,我们希望这个网络能成为一个很好的起点。

在MATLAB中导入AlexNet非常简单

Net = alexnet;

如果这是您第一次运行这段代码,您可能会得到一条错误消息。点击链接下载AlexNet。你只需要下载AlexNet一次。

让我们看看网络的最后几层。你会看到AlexNet被训练为1000种不同类别的对象。

层=净。层
…23 'fc8'全连接1000全连接层24 'prob' Softmax Softmax 25 'output' Classification output crossentropyex与“tench”,“金鱼”,和998其他类


顺便说一句,如果你想查看AlexNet训练的所有1000个类别,这里有一行有趣的代码:

class_names = net.Layers(end).ClassNames;


回到演示。注意第23层,上面写着1000个全连接层?我们需要将1000改为4,因为我们有四类对象。

从AlexNet中获取图层,然后添加我们自己的

Layers = Layers (1:end-3);layers(end+1) = fullyConnectedLayer(4, 'Name', 'fc8_2 ');layers(end+1) = softmaxLayer;layers(end+1) = classificationLayer()


在我们改变网络之后,我们可以快速地重新训练它

convnet = trainNetwork(imds, layers, opts);

*快速是一个相对的术语,取决于你的硬件和训练图像的数量。

在最后,我们有一个自定义网络来识别我们的四类对象:


它的表现如何?运行这个脚本的准确率大约为80%。当然,这是一个随机过程,所以您可以预期这个数字会有轻微的变化.你能在这四个类别上获得更高的准确度吗?请在下方评论!


特征提取



也许神经网络的一个不太常见的技术是使用它们作为特征提取器。这到底是什么意思?Gabriel在上面的视频中很好地解释了特征和特征提取的概念。

神经网络的准确性部分是由于用于训练它们的大量数据。事实上,AlexNet——第二个和第三个例子的起始点——是在它上面进行训练的数百万的图像。您可以预期网络的底层可以识别定义单个对象的丰富特征,那么如果我们简单地提取这些特征会发生什么呢?

在这里,我们有一个典型的机器学习和深度学习工作流。让我们结合这些工作流程并创建一个超级分类器*
*超级分类器不是一个专业术语。

使用CNN作为特征提取技术,然后在机器学习模型中使用这些特征可以是深度学习的一个高度通用的用途。


请注意MATLAB从测试集中提取这些特征是多么容易。

featureLayer = 'fc7';trainingFeatures =激活(convnet, trainingSet, featureLayer);


特征可以从网络中的任何地方提取出来。我们选择最后一个全连接层,这将是我们的类别中最复杂和最具描述性的层,但您可以在早期阶段选择功能。如果从另一层选择特性呢?这对准确性有什么影响?你甚至可以想象网络的激活这个例子

使用特征提取方法的另一个好处是能够选择最适合数据的分类器。我们在视频中使用了一个多类svm:

fitcecoc

我们也可以选择一个多类朴素贝叶斯模型-fitcnb-或k最近邻分类模型-fitcknn-或各种其他分类模型。


有这么多选择真是太好了,但你究竟如何知道该选择哪个分类器呢?


查看我们的分类学习者app为数据找到最佳模型。

使用ConvNets进行特征提取的另一个优点是只需更少的数据就能得到准确的结果。在演示的最后,我们看到使用最少的数据,我们得到了大约77%的准确性。在这个例子中,我们故意使用更少的数据(每个类别50张图像)来展示如何在没有数千张样本图像的情况下仍然可以使用深度学习方法。增加训练图像的数量也会提高准确性吗?


请看第11行代码

[trainingSet, ~] = splitEachLabel(imds, 50, 'randomize');


并将数字50更改为更高的数字,以增加每个类别的样本数量。

总结

这三个例子和相应的视频可以帮助您探索使用深度学习技术创建自定义对象识别模型的3种不同方法。

试一试,让我们知道你的想法在这里或者留下评论为深度学习团队。

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。