以图像数据集为例,手把手教你宏观看机器学习模型、基本用法
点击上方关注,All in AI中国
在厨师中有句名言:“吃饭应该先用眼睛来吃。”同理,没有什么能比图片更能体现社会交际的核心。magicpin是一个主打本地服务的网络平台。magicpin会实时跟进用户所在的位置,并自动生成当地折扣商品的信息。简单的说,就是基于用户位置推荐折扣商家。
人们通过在手机上浏览当地餐馆、酒吧的折扣信息,来决定在哪吃饭。而其中,去过这些商家的用户上传的关于这些商家的图片评论成为了那些没去过或考虑去的用户的重要参考依据。在这篇文章中,我们将描述我们如何构建我们的系统来自动分析并置顶那些对其他用户有用的图片评论。
在这篇文章中,我们将描述我们如何在100万个图像数据集上构建和测试不同的机器学习技术,从经典的ML技术(如随机森林)发展到CNN模型。为了深入了解这些模型,我们建议你可以先看看这篇文章:http://cs231n.stanford.edu/
该系统的主要目标是开发一个能够对用户上传的图片进行有效分类的机器学习模型。需要强调的是,该模型位于一个更大的系统中,模型只负责这个系统中的数据准备、评估等任务。下面的图表是对刚才所描述内容的直观解释:
手动对一百万张图片进行评级
我们的数据集是由100万个用户上传的图像和相应的图像元数据组成,我们的分析师根据这些数据集划分了一到五个等级。我们现在要从图像元数据中提取20个以上的特征,如时间、日期、位置等。我们需要要建立一个像SVN这样的经典机器学习模型,并建立一个基线将性能与神经网络进行比较。在后文中,作者将讲述我们模型的第一次切割,以及我们是如何在数据集上进行迭代并发展为神经网络的。你可以先简单的理解为:
1.用平均值替换缺失的数据项
2.使用标签编码将字符串数据转换为数字格式
3.进行特征捕捉
基于随机森林和SVN等技术的分类模型
在我们的第一阶段中,我们决定训练9个不同的分类模型,目的是预测5个等级中的一个(1、2、3、4或5)。不同模型的结果如下。所有这些模型都是用Scikit学习或LibSVM实现的。
最后一列表示训练集的精度。我们可以发现,部分模型(如随机森林/决策树)的测试集精度低至40%。为了理解原因,我们决定绘制关系图。下图会说明为什么这些模型没有我们像所期待的那样发挥作用,反而精度那么低。
从图片上看,显然我们需要使用神经网络来完成这项任务,因为它包含了图像的属性,而不是像上述模型那样只处理元数据。
向深度学习迁移 - CNN
为了改进该系统,下一步是训练神经网络。为此,我们将数据集扩展为150万张图像,并将其分成训练、验证和测试集。
训练迁移学习
为了训练我们的CNN,我们首先在现有的图像分类模型上进行迁移学习。当神经网络有许多参数时,它的工作效果最好。然而,这也意味着他们必须对非常大的数据集进行训练。由于需要从头开始,训练模型可能是一个需要数天甚至数周的计算密集型过程,所以我们决定从对ILSVRC-2012-CLS图像分类数据集训练模型的迁移学习开始。
我们在下面的模型中进行了迁移学习:
VGG 16
MobileNet V2 1.4
Inception V3
ResNet50
InceptionResNetV2
Xception
NASNet-Mobile
NASNet-Large
DenseNet 201
以下是这些模型训练的主要结果:
令人惊讶的是,测试的结果并不尽人意。为了找出问题,我们绘制了Inception V 3的混淆矩阵。
该模型无法预测1、3和5级的任何图像,也无法解释我们在500000张图像的训练集中观察图像的分布情况。
深度学习管道增强
为了提高上述模型的性能,我们决定探讨以下几点:
1.消除训练数据中的偏斜度,在所有的课程中建立了一个图像数量相等的训练集。
2.用二元分类取代明确分类, 我们最初的目的是将图像分类为{1,2,3,4,5},但是对于我们的系统来说,将图像分类为{1,0}就足够了。我们将分级为{1,2}的图像聚合到标签{0}中,将分级为{4,5}的图像聚合到标签{1}中。为了提高模型的泛化能力,我们决定从数据集中删除3类。
3.微调模型而不是迁移学习,在迁移学习中,预先训练的模型权重没有改变。然而,当我们微调模型时,我们需要对模型进行反向传播,此时我们的数据集将调整权重。这样做的优点是可训练参数的数量会提高,但是微调训练的过程比转移学习花费更长的时间。
下面是我们对模型进行微调后的一些结果:
采用ADAM模型优化器,学习率为0.001。将模型优化器的超参数转换为"RMSProp",学习率为0.00001,进一步提高了结果。
结语
采用基于深度学习的系统来识别图像,大大减少了分析人员的工作量,并使能够向用户显示的图像数量增加。同时,我们认识到神经网络和任何机器学习技术都是不完善的,其缺点你可以通过查询资料进行更好地了解。