分享

GraphLab Create:更简单更强大的深度学习

 用勿龍潛 2016-08-02

机器学习的一个核心目标是对输入数据进行分类。例如一个训练好的分类器,输入一张图片便可预测这张图中是狗还猫。

用来分类的方法有很多,支持向量机、逻辑回归、深度学习等。最近深度学习如日中天,虽然很强大,但其训练起来却是昂贵的,费时费力。你需要确定网络多少层,需要确定每层多少个节点,需要初始化模型的参数等等。简单来说,深度学习模型就像一个带有很多旋钮和表盘的机器,这些旋钮和表盘你没调好它就罢工。

最新发布的GraphLab Create 1.1 及1.2使深度学习变得超级简单。它不需要你自己在选择模型和调参上成为专家,就可以玩转神经网络。基于输入数据,neuralnet_classifier.create()函数选择一个网络架构并设置合理的参数值。在MNIST上测试:

在测试集上评估这个模型:

结果达到了98%的精度。寥寥几行代码,深度学习就这么简单。

这样还不够,GraphLab Create还要求要使深度学习变得更简单。尽管GraphLab Create能选择较好的网络架构和参数,但这种自动化处理往往是不够的。优化设置往往是极端具体的问题,没有好的直觉、没有足够丰富的经验、没有很多PhD学生的话这个问题很难解决。

其实并非所有问题都得从头开始去训练一个深度模型,再者说,你要解决的问题也并不特殊,它与一些已经解决的问题多少有关联。拿分类猫狗的例子,最有名的数据集ImageNet,DNN表现最优异,其训练的模型可将输入从一千种类别中分辨出其属于哪一类。分辨狮子和狐狸类别的那些特征难道对分辨猫狗没用?

当然有用。通过简单移除DNN的输出层,将传播到输出层的信号作为特征喂给任何一种分类器便可解决我们区分猫狗的任务。步骤如下:

第一步:在一个超大的通用的数据集上训练一个DNN分类器。最好的例子是ImageNet,1000种类别120万张图片。GraphLab拥有在ImageNet上训练好的模型,因此当你应用的时候可以跳过这一步,只需下载这个模型:

第二步:DNN每一层的输出可以看作每张图像的一个有意义的向量表示。对你任务中的图像,提取输出层前面那层的特征向量。

第三步:以这些特征作为输入,训练一个针对你自己任务的新的分类器。

乍一看可能觉得这样比训练一个DNN更复杂。其实不然,第一步可在很多不同的问题上复用,而且GraphLab给你提供了这个模型,所以并不需要你自己去训练。第二步用GraphLab的API就可搞定。第三步随便一个比深度学习模型简单的分类器都可行。这样一套流程下来,无需调参、训练更快、效果更好,即使有时训练数据不够也不影响。另外,即便你的第三步分类任务与第一步训练的任务相对无关,此方法效果依然很好。

举个例子,还是分类猫和狗:

第一步,下载在ImageNet上训练好的模型。

而后下载狗和猫的图像。因原始ImageNet模型在256x256x3的图像上训练,所以这里调整了一下图像大小。

第二步,提取特征

第三步,训练一个简单的分类器

为看效果,做个评估:

结果达到约96%的精度,为作对比,仅用.create()方法,结果如下:

精度仅60%。很明显,提取特征结合简单的分类器的方法超级强悍。

为了确保此方法具有通用性,在CIFAR-10上验证。CIFAR有6万张32×32的图像,总共分为10类,5万张训练图像,一万张测试图像。少量例图如下:

重复上述步骤:

做评估:

精度接近95%。事实上,这个结果比已公布的任何结果都好,且看齐Kaggle竞赛中获胜的结果。人类的识别精度才94%。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多