当前位置:主页 > 资料 >

我赢得 Kaggle 竞赛的第五名,这些经验分享给你
栏目分类:资料   发布日期:2018-08-02   浏览次数:

导读:本文为去找网小编(www.7zhao.net)为您推荐的我赢得 Kaggle 竞赛的第五名,这些经验分享给你,希望对您有所帮助,谢谢! 翻译 | 京鹏 张小恬 蒋华烈 程磊 校对| 余杭 整理 | MY 植物幼苗分类

本文为去找网小编(www.7zhao.net)为您推荐的我赢得 Kaggle 竞赛的第五名,这些经验分享给你,希望对您有所帮助,谢谢!

去找(www.7zhao.net欢迎您



翻译 |  京鹏  张小恬  蒋华烈  程磊       校对 |  余杭       整理 | MY

copyright www.7zhao.net

植物幼苗分类比赛冠军 本文来自去找www.7zhao.net

这篇文章记录了我参加 Kaggle 所采用的方法。我曾连续几个月占据榜首,并最终名列第五。这些方法通用性很好,可以应用到其他的图片分类任务中。 内容来自www.7zhao.net

Kaggle 是一个 和 竞赛的平台,在这里,统计人员和数据挖掘者参与竞争,以产生预测和描述公司和用户上传数据集的最佳模型。这种 的方式依赖于这样一个事实,即有无数的策略可用于任何预测性建模任务,并且事先不可能知道哪种技术或分析最有效。[1] www.7zhao.net

任务概览

copyright www.7zhao.net

你能从作物幼苗中区分出杂草吗? 欢迎访问www.7zhao.net

有效的解决方案意味着更好的作物产量及更好的环境管理。

www.7zhao.net

奥胡斯大学信号处理组与丹麦南方大学合作,发布了一个数据集,其中包含不同生长阶段的 12 个种类大约 960 种植物的图像 [1] [2]。 本文来自去找www.7zhao.net

copyright www.7zhao.net

植物样本之一:繁缕 [3]

内容来自www.7zhao.net

上述图像数据库已公开发布。它包含带注释的 RGB 图像,分辨率约为每毫米 10 个像素。 本文来自去找www.7zhao.net

采用基于 F1 分数的指标对分类结果进行评估。数据集链接在 里 [13] www.7zhao.net

以下图像是描述数据集中所有 12 个类的示例: 本文来自去找www.7zhao.net

内容来自www.7zhao.net

图片分类任务包含以下5个步骤:

步骤 1:

www.7zhao.net

机器学习中的首要任务是分析数据集,然后才能进行任意算法。为了解数据集的复杂性,这一步很重要,这最终将有助于该算法设计。

去找(www.7zhao.net欢迎您

图像和类的分布如下: 欢迎访问www.7zhao.net

本文来自去找www.7zhao.net

如上所述,此包含 12 个类共 4750 个图像。但是,以上可以看出,各类值分布不平均,图像类数值分布从最大 654 张到最小的 221 幅不等。这清楚地表明数据是不平均的,但为获得最好的结果我们需要权衡数据。步骤 3 中我们将达成此任务。 www.7zhao.net

去找(www.7zhao.net欢迎您

每类的图像分布

去找(www.7zhao.net欢迎您

现在对图像进行可视化十分重要,以便能更好了解数据。因此,我们将展示每个类中的部分示例,查看图像的不同之处。

copyright www.7zhao.net

内容来自www.7zhao.net

所有的图像看起来都相差无几,几乎没有什么内容可以从上面的图像群中获得。因此,我决定使用一个称为 t 分布随机邻域嵌入(t. SNE)的可视化技术观察图像分布。 欢迎访问www.7zhao.net

t 分布随机邻域嵌入(t. SNE)是一种特别适合于高维数据集的可视化降维技术。该技术可以通过巴恩斯-小屋逼近模型实现,这允许该技术应用于现实世界的大型数据集。[14]  www.7zhao.net

欢迎访问www.7zhao.net

数据集的 t-SNE 可视化  www.7zhao.net

在仔细观察后,我们几乎看不出各类间差异。所以,掌握是仅仅对人类而言这些数据是难以分辨的,还是对于机器学习模型同样如此十分重要。为此,我们将为它做一个基本的基准。

copyright www.7zhao.net

训练以及验证集合 

在模型基准开始之前我们需要将数据划分为训练数据和验证数据集,对原始测试集进行测试之前验证集起到测试数据集作用。所以,模型基本上在训练数据集上进行实验,并在验证集上进行了测试,之后模型随着集合的多次验证得以改进。一旦我们对验证集的结果感到满意,就可将模型应用于实际测试数据。我们能够以此看到模型在我们的验证集上为超拟合或是欠拟合,这可以帮助我们更好地调整模型。 去找(www.7zhao.net欢迎您

我们通过保持 80% 图像作为训练数据集及 20% 作为验证集来划分 4750 图像的数据集。

www.7zhao.net

www.7zhao.net

训练和验证数据拆分

去找(www.7zhao.net欢迎您

步骤 2: copyright www.7zhao.net

一旦我们得到了训练集和验证集,我们就从数据集的基准开始着手。这是一个建立在测试集上的一个分类问题,我们需要把测试集中的每一个实例划分为 12 类中的一类。所以我们将会用一个卷积神经网络(CNN)去完成这个任务。 本文来自去找www.7zhao.net

有很多途径去创建一个 CNN 模型, 但是作为初学者, 我们最好使用 Keras 深度学习库. 我们也将使用 Keras 上提供的预训练模型, 这些模型是在 ImageNet 数据集上训练过的并且我们可以通过微调这些模型以用于我们这里的任务。 内容来自www.7zhao.net

从头开始去训练卷积神经网络实际上是非常低效的。所以,我们采用在有着 1000 类的 ImageNet 数据集上预训练过的 CNN 模型参数,并且在微调时,我们固定住一些层的参数,其他层的参数继续在我们这里的数据集上继续训练。这样做的原因是因为比较前面的一些层是用来学习图像的基本特征的,我们没有必要去训练并且可以直接在我们的任务里直接采用。一个值得我们注意的重要事情是,我们要去检查我们这里的数据集跟 ImageNet 相似性如何以及有多大。这两个数据集的特性决定了我们该如何进行网络微调。想要获取关于网络微调的详细资料,请参考 的博客: 本文来自去找www.7zhao.net

对于我们这里的例子,数据集是很小的,并且还跟 ImageNet 有点相似。所以我们首先直接用 ImageNet 上的权重,并加上有着 12 个类别的最终输出层来构建我们的第一个基准程序。接着,我们去把一些后面的层给「松开」并只训练这些层。 www.7zhao.net

因为 Keras 提供很多的预训练模型,我们将用 Keras 去完成我们最初基准程序,我们将在我们的任务上用 ResNet50 和 InceptionResNetV2 这两个模型。为了理解在给定模型下,我们是过拟合还是欠拟合数据集,为数据集准备一个简单模型和一个复杂模型作为基准是非常重要的。

去找(www.7zhao.net欢迎您

本文来自去找www.7zhao.net

我们也可以检查这些模型在 ImageNet 数据集上的性能或者这里的每一个模型的参数数量来选择我们的基准模型。 欢迎访问www.7zhao.net

www.7zhao.net

对于第一个基准模型,我去掉了最后的输出层,并且只增加了对应着 12 个类别的输出层。模型总结贴在这里了,我们可以看到参数量,接着是最后几个层的截屏。 去找(www.7zhao.net欢迎您

去找(www.7zhao.net欢迎您

我们加了一个稠密的层来得到第一个基准 本文来自去找www.7zhao.net

模型总共训练了 10 轮,6 轮以后结果饱和了。训练集上的准确度达到了 88%,验证集上也有 87% 的准确度。 去找(www.7zhao.net欢迎您

内容来自www.7zhao.net

为了提高性能,一些前面的层被「松开」,我们以一个指数下降的学习率去训练这些层。这个可以进一步得到 2% 的提升。

www.7zhao.net

欢迎访问www.7zhao.net

训练一些前面的层的结果 内容来自www.7zhao.net

这个过程中使用到的一些超参数:

本文来自去找www.7zhao.net

www.7zhao.net

步骤 3: 

去找(www.7zhao.net欢迎您

在具备相关知识的基础下,我们可以尝试着增加图像数据的数量以改进上述模型。 去找(www.7zhao.net欢迎您

没有数据,就没有机器学习!

内容来自www.7zhao.net

但需要注意的是我们所拥有的数据往往存在数据类别不平衡的情况。我们首先应该处理这一问题,从而使得模型的每批样本即便拥有少量图像数据,也能达到较好的分类效果。

本文来自去找www.7zhao.net

现实生活中的数据集很少能够达到数据平衡,而且模型对少数类样本的分类效果并不好。错误地分类一个少数类样本往往比错误分类一个正常数量样本会付出更大的代价。

copyright www.7zhao.net

我们可以用以下两种算法来解决数据不平衡问题: 欢迎访问www.7zhao.net

1. 不均衡学习的自适应合成抽样算法(ADASYN):ADASYN 通过更多地合成更难学习的数据集,从而为少数类样本合成更多数据。

本文来自去找www.7zhao.net

ADASYN 算法的基本思想是根据数据的学习难度,对不同的少数类样本进行加权分布。相比那些容易学习的少数类样本,为那些更难学习的少数类样本合成更多的数据。因此,ADASYN 算法通过以下两种方式来改善数据:1)减少类不平衡引起的偏差,2)自适应地将分类决策边界转向学习困难的样本。[5] 本文来自去找www.7zhao.net

2. 合成少数类过采样算法 (SMOTE):SMOTE 通过对少数类的过度采样和对多数类的采样,从而获得最佳结果。 内容来自www.7zhao.net

相比于对多数类样本进行欠采样,通过把对少数(异常)类样本进行过采样和对多数(正常)类进行采样相结合的方式,从而实现更好的分类效果(在 ROC 空间中)。[6]

去找(www.7zhao.net欢迎您

copyright www.7zhao.net

针对这个实例,SMOTE 算法相比 ADASYN 算法表现得更加出色。一旦数据达到平衡,我们便可以把这些数据用于数据集的扩充。 去找(www.7zhao.net欢迎您

另外有一些数据增强方法,其中比较重要的有: 内容来自www.7zhao.net

  • 缩放 www.7zhao.net

  • 裁剪

    内容来自www.7zhao.net

  • 翻转

    www.7zhao.net

  • 回转 本文来自去找www.7zhao.net

  • 翻译

    内容来自www.7zhao.net

  • 增加噪声 欢迎访问www.7zhao.net

  • 改变照明条件 本文来自去找www.7zhao.net

  • 像 GAN 这样的先进技术 copyright www.7zhao.net

现在已经有一些非常好的博客可以解释以上所有技巧。[8] [9] 因此这里不再细述。这里用到了上面提到的除 GAN 之外的所有数据增强技术。 copyright www.7zhao.net

步骤 4: 欢迎访问www.7zhao.net

......

内容来自www.7zhao.net

想要继续阅读,请移步至我们的AI研习社社区:

内容来自www.7zhao.net

更多精彩内容尽在 AI 研习社。 copyright www.7zhao.net

不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

本文来自去找www.7zhao.net

手机端可以扫描二维码访问:

欢迎访问www.7zhao.net

www.7zhao.net

雷锋网雷锋网 (公众号:雷锋网) www.7zhao.net

雷锋网原创文章,未经授权禁止转载。详情见 。

去找(www.7zhao.net欢迎您

去找(www.7zhao.net欢迎您


本文原文地址:https://www.leiphone.com/news/201807/hhhKv8YWMsIUbunf.html

以上为我赢得 Kaggle 竞赛的第五名,这些经验分享给你文章的全部内容,若您也有好的文章,欢迎与我们分享!

www.7zhao.net

Copyright ©2008-2017去找网版权所有   皖ICP备12002049号-2 皖公网安备 34088102000435号   关于我们|联系我们| 免责声明|友情链接|网站地图|手机版