从系列:深度学习与MATLAB
乔•Hicklin MathWorks
嗨。我叫乔·希克林。我是MathWorks的高级开发人员。我将向你们展示如何进行迁移学习。转移学习是将深度学习应用到你的问题中的一种非常实用的方法。
通过转移学习,你获得一个预先存在的神经网络,对它稍作修改,然后在你的图像上重新训练它。这比从零开始设计一个网络并自己训练它要容易得多。
在我的工作中,我需要能够区分汉堡包与热狗、纸杯蛋糕、苹果派和冰淇淋。据我所知,没有网络能帮我做到这一点。我将从一个已经存在的网络开始,Alex net。Alex net已经被训练去分类1000种不同的图像,它已经被训练去分类100多万张图像。
所以我在这里。我要开始加载Alex net,我要把图层拿出来,这样我可以看到部分。如果你往下看,你可以看到Alex net有25层。大多数图层都在做一些有用的图像处理工作,这些工作对我的系统和Alex net的系统都是有效的。这些我就不管了。
但是第23层有1000个神经元,因为Alex net分类了1000个不同的图像。我只打算做五种不同的图像,所以我要用一个只有五种图像的网络来代替它。最后,我还要替换输出层。Alex net的最后一层学习了Alex net的分类,那1000个不同的类。我不想那样。我将用一个空的层来代替它来学习我的。
所以,现在我已经得到了我的网络设置。它的时间来处理数据。你不需要一百万相似图片亚历克斯网被训练,但你做他们的需要1000取得好成绩。我做了一个文件夹中包含五个子文件夹,每一个我的课的。因此,有一个叫苹果馅饼,一个叫蛋糕,等等。而内部的每个这些文件夹中的相应主题的1000倍的图像。
我的尺寸这些图像是大小亚历克斯网预计,227 227,你就必须做到这一点,太。如果你安排你的数据是这样,你可以使用MATLAB的图像数据存储对象,因为它知道的结构,它会加载所有图像和正确标记它们。所以,这就是我在这里做什么。
只要我有我的图片,我需要把它们分成两组。他们中的大多数,我会使用的培训,但我会几个人出来保存到测试的准确性更高版本。因此,让我们做到这一点。现在,我都准备好训练我的网络。我必须在这里设置了几个网络参数。我选择的是要很好地工作参数。
如果你愿意,你可以改变这些,看看会发生什么。然后我准备训练网络。开始的。这需要五到六分钟来完成它的工作。我的电脑里有一个相当强大的GPU,所以它非常快。你的里程可能不同。好了,网络训练结束了。我们现在要做的第一件事是看看它有多精确。
我们要问网络的测试图像,我们离开了我们的训练集出来的图像进行分类。然后,我们只是去看看那些小部分的它得到正确的。我们是84%准确。相当不错的工作的五分钟。现在,让我们尝试与一些真正的食品摄像头。我刚好在我的办公桌上放一些食物。有汉堡包,苹果派,热狗,冰淇淋。
所以总的来说,它运行得很好,而且对于很多这样的情况,它是相当健壮的。不同的角度。好了。这比我预期的要好,真的。我尽可能地简化了这个演示,但是在下载部分,我们将包括第二个文件,它将有更多的注释,并且它将有更多的代码来处理可能出现的一些情况。
我已经展示了如何做迁移学习的分类,但如果你需要真正的数字出来,你也可以做回归与迁移学习。嗯,我希望我展示了足以让你在传输的学习兴趣,所以抓住一些小吃,并给它一展身手。
记录:2017年2月8日