从系列:用MATLAB进行深度学习
乔希克林,MathWorks公司
你好。我的名字是乔希克林。我在MathWorks公司的高级开发人员。我要告诉你如何做迁移学习。迁移学习可以是深度学习应用到你的问题很实际的方式。
随着迁移学习,你把已有的神经网络,稍微修改它,然后重新训练它在你的图片。这可能会产生优异的成绩,远远比从头开始设计网络和自己的训练就容易得多。
在我的工作,我需要能够从热狗和蛋糕和苹果馅饼和冰淇淋区分汉堡包。据我所知,没有网络,它会为我做的。所以我要开始一个已经存在的网络,亚历克斯网。亚历克斯网一直在训练,1000个不同类型的图像进行分类,并且它已经已经培训了超过一万张图片。
所以我在这里。我要开始了装载亚历克斯网,我要得到的层出的,所以我能看到的部分。如果你在这里往下看,可以看到亚历克斯网有25层。大部分的层都在做有用的图像处理的事情,会为我的系统工作,以及亚历克斯净的。我要离开那些独自一人。
但第23层中有1000元,因为亚历克斯网1000个进行分类不同的图像。我只打算做五种不同类型的图像,所以我要替换与只拥有五个图像的网络。最后,我要代替输出层为好。亚历克斯网的最后一层了解到亚历克斯网的分类,那些1000个不同的类别。我不希望出现这种情况。我要与那将学习矿井空层来代替它。
现在我已经建立了我的网络。是时候处理数据了。你不需要一百万个像Alex net那样的图像,但是你需要1000个这样的图像才能得到好的结果。我做了一个文件夹,里面有五个子文件夹,每个类一个。有一种叫苹果派,还有一种叫杯形蛋糕,等等。每一个文件夹里都有1000张相关主题的图片。
我将这些图片的大小调整为Alex net所期望的大小,227 * 227,您也必须这样做。如果你像这样排列你的数据,你可以使用MATLAB的图像数据存储对象,因为它理解那个结构,它会加载所有的图像并为你适当地标记它们。这就是我要做的。
一旦我得到了我的图像,我需要把它们分成两组。我将使用它们中的大多数进行训练,但是我将保留其中的一些,以便稍后测试准确性。我们来做一下。现在我已经准备好训练我的人际网络了。我需要设置一些网络参数。我选择了一些运行良好的参数。
如果你喜欢,并看看会发生什么你可以改变这些。然后,我已经准备好对网络进行训练。开始的。这是要采取五六分钟来完成其工作。我在我的电脑一个相当强大的GPU,所以这是相当快。你的旅费可能会改变。好吧,网络的完成训练。我们现在要做的第一件事是看它是如何准确。
我们会要求网络对测试图像进行分类,也就是我们在训练集中遗漏的图像,然后我们会看看有多少是正确的。84%的准确率。对于五分钟的工作来说已经很不错了。现在让我们用网络摄像头在一些真正的食物上尝试一下。我只是碰巧桌子上有一些食物。有汉堡包、苹果派、热狗、冰淇淋。
所以,总体来说,它的工作原理相当不错,这是相当强劲了很多的这些。不同的角度和东西。就这样,我们走了。这工作比我预期的要好,真的。我简化了这个演示,就像我可以,但在下载,我们会包括将有更多的评论的第二个文件,它就会有更多的代码来处理可能出现的一些情况。
我已经向你们展示了如何用转移学习进行分类,但是如果你需要实际的数字,你也可以用转移学习进行回归。好吧,我希望我已经向你们展示了足够多的东西,让你们对转学学习感兴趣,所以拿一些零食,试一试吧。
记录:2017年2月8日