本周文件交换精选

我们最好的用户提交

深度学习教程系列

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

阿维写了关于深度学习的文章11行代码.如果你刚刚开始深度学习,我鼓励你先去那里:这是一个很好的帖子,也是一个很好的开始方式。但让我们再进一步.如果我们想创建自己的网络来识别会发生什么新对象在图片?

文件交换的条目将为您提供3个示例:

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


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


示例是使用来自的映像构建的CIFAR-10,一个相对较小的[32 × 32像素]图像的公开可用数据库。其中包含一个文件叫做DownloadCIFAR10.m它将下载图像并将它们放入一个测试和培训文件夹中。下载和提取这些图像需要一些时间,但只需要运行一次。


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

深度学习入门系列



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


从头开始训练神经网络

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



想更深层次地了解cnn吗?请查看这段简短的视频,我们将深入了解卷积神经网络的关键方面。

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


转移学习


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


它也有助于有一个准确的网络这就是为什么我们将以AlexNet作为开始,这是一个赢得了2012年ILSVRC竞赛的ConvNet。它已经训练了许多种动物,因为我们想识别狗,青蛙,猫和鹿,我们希望这个网络是一个很好的起点。

导入AlexNet是一个微风在MATLAB

网= alexnet;

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

让我们看看网络的最后几层。你会看到AlexNet训练了1000种不同类别的物体。

层=净。层
…23 'fc8' Fully Connected 1000 Fully Connected layer 24 'prob' Softmax ' Softmax 25 'output' Classification output crossentropyex with 'tench', '金鱼'和998其他类


作为一个快速的旁白,如果你想看到所有1000个类别的AlexNet训练,这里有一行有趣的代码:

class_names = net.Layers .ClassNames(结束);


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

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

层=层(1:end-3);层(end+1) = fulllyconnectedlayer (4, 'Name', 'fc8_2 ');层(端+ 1)= softmaxLayer;层(端+ 1)= classificationLayer ()


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

convnet = trainNetwork(imds, layers, opts);

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

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


它做得怎么样?运行这个脚本给了我大约80%的准确率。当然,这是一个随机过程,所以你可以期待这个数字的微小变化.你能在这四个类别中获得更高的准确性吗?请在下方留言!


特征提取



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

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

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

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


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

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


特征可以从网络中的任何位置提取。我们选择最后一个完全连接的层,这将是最复杂和描述性的类别,但你可以在早期阶段选择功能。如果从另一层选择功能会怎样?这对准确性有什么影响?你甚至可以可视化网络的激活这个例子

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

fitcecoc

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


有很多选择是很好的,但是你怎么知道该选择哪个分类器呢?


看看我们分类学习者应用找到数据的最佳模型。

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


取第11行代码

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


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

总结

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

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

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。