亚马逊上面这个size()是什么啊!求大神解救(见下图)

求大神解救为何新建空项目以後添加新项目这里没有C++文件(.cpp)这个选项呢


}

原标题:Kaggle获奖者自述比赛求生指喃:我们如何“穿越”亚马逊热带雨林

中山大学|计算机科学与技术研究生

来源自知乎专栏:AI带路党

量子位 已获授权编辑发布

大家好我是思聪 · 格里尔斯,我将向您展示如何从世界上某些竞争最激烈的比赛中拿到金牌我将面临一个月的比赛挑战,在这些比赛中缺乏正确的求生技巧你甚至拿不到铜牌。这次我来到了亚马逊热带雨林。

当我和我的队友们进入这片雨林的时候这场长达三个月的比赛已经进荇了两个月,想要弯道超车后来居上,那可不是件容易的事我们最后在比赛结束的时候,获得了Public Leaderboard第一 Private Leaderboard第六的成绩,斩获一块金牌這个过程中,我们设计并使用了一套简洁有效的流程还探索出了一些略显奇怪的技巧。

使用这套流程我们从Public Leaderboard一百多名起步,一路杀进金牌区一直到比赛结束前,占据Public Leaderboard榜首数天都没有遇到明显的阻力。

在这篇文章里我不仅会介绍这个流程本身,还会把我们产生这套鋶程的思路也分享出来让大家看完之后,下次面对一个新问题也知道该如何下手。

在文章的结尾我还会讲一讲我们比赛最后一夜的瘋狂与刺激,结果公布时的懵逼冷静之后的分析,以及最后屈服于伟大的随机性的故事

  • 初探雨林:概述(Overview)与数据(Data)

  • 探险开始:解決方案的规划和选择

  • 学习,奋斗结果与伟大的随机性

  • 这个ipython notebook有不少信息量,包含对数据的读取探索,相关性分析可以大致让我们对数據有一个基本的感觉,并且可以下载下来进一步分析可以省上不少功夫。

    如果官方没有提供这样一个notebook Kernel区一般也会有人发出自己的一些汾析,实在没有最好也自己做一下这个步骤因为这个可以为后面的一些决策提供信息。

    其中训练集大概有四万张图像测试集大概有六萬张图像。数据说明包括了数据的构成和标签的来源我们可以先看一下这张图:

    这次比赛中的每个图像样本都是256*256像素,并且每个像素宽約对应地面的宽度大约是/p/

    • 一开始模型比较少的时候我们直接把不同模型的结果进行平均(Average Bagging)

    在做Ensemble阶段,对于每个样本我们有一个(模型數 x 17)大小的概率矩阵我们的目标是获得一个长度17的概率向量。

    对于三种Ensemble我们对它们的建模分别为:

    • Average Bagging:所有模型有相同的权重,将概率矩阵沿模型数维度进行平均

    • Bagging Ensemble Selection:每个模型有不同的权重,在Selection的过程中有的模型可能被选到多次,有的模型也可能一次也没被选到按照被选中次数为权重,概率矩阵沿模型维度进行加权平均

    • Stacking:每个模型的每个类都有自己的权重,比如某个模型擅长对气象类进行区分却對正常类性能很差,那显然这个模型在气象类和正常类的权重应该不一样我们需要对每个类别单独学习一组函数或一组权重

    Logistic Regression、Ridge Regression是对输叺模型进行非线性的组合为了探索其他可能性,我们也试着设计对输入模型进行线性组合的模型

    我们称之为Attention Stacking的模型相对比较简单,对於每个类我们初始化一组模型数长度的向量,对这个向量进行Softmax我们就获得一组求和为1权重,这样我们对这个类别所有模型的预测概率按这组权重进行加权平均就可以得到这个类别的预测结果。

    因为这种加权求和的形式和流行的Attention机制有点像我们就叫它Attention Stacking,虽然它可能有其他更正式的叫法但我们还没时间仔细查文献,所以暂且这么称呼

    Stacking阶段我们按照单模型阶段的五折划分进行了交叉验证,整个流程和單模型阶段有点像不过Stacking阶段,按验证集的F2-Score进行early stopping在验证集上求阈值的阶段,我们有不同的两套方案:

    • 方案一:out-of-fold的做法这个方案还是在out-of-fold仩搜索阈值,要注意的一点是每个折的模型的测试输入要使用第一阶段对应的折的预测结果,确保产生搜索阈值用的验证集和测试集的輸入概率矩阵由相同的第一阶段模型产生

    • 方案二:非out-of-fold的做法,下图可以看做是一个将Attention Stacking每个类的权重拼在一起得到的矩阵沿模型维度每列求和为1。因为Attention Stacking的做的其实是对每个类不同模型预测结果的一种线性组合我们可以把五折求出来的五个权重矩阵直接平均获得一个新的權重矩阵。

    然后用这个新的权重矩阵对所有训练数据和测试数据进行加权平均在加权平均的训练数据上搜索阈值,应用在测试数据的加權平均结果上得到类预测这种方案也保持了搜索阈值所用的集合与测试集预测结果产生的方式一致。

    经过我们的测试中方案二比方案┅表现得更好。

    到此我们的方案也基本讲解完毕。最后我想给大家讲讲我们比赛中的一些经历和对比赛结果的分析。

    4. 学习奋斗,结果与伟大的随机性

    在上次参加Quora Question Pairs的过程中我们在获得一些文本类比赛实战经验的同时,也对Kaggle比赛的流程和基本方法有了一定的了解并将經验总结写成了《分分钟带你杀入Kaggle Top 1%》。为了学习一些新的东西以及验证我们对Kaggle比赛套路的理解我们选择了正在进行的 Planet: Understanding the Amazon from Space,这是一个图像多標签的分类任务和Quora Question Pairs的文本二分类任务有很大不同。

    在参加这个比赛前我们队里并没有人有太多参加图像比赛的经验,关注到这个比赛嘚时候三个月的比赛也只剩下一个月。

    一开始的十天因为大家还有各种的项目工作没有完结,只有两三个队友零星地探索游荡在Public LB一百多名。在剩下最后二十天的时候我们陆续完成了手头的工作,腾出了时间和计算资源全力地参加这个比赛。

    我们花了一两天搜集了這个比赛和其它类似比赛的信息从中总结出了一些基本的套路。在探索和确定出基本方案后我们队内各自独立地去实现和探索,每个囚都有自己一套代码

    保持代码和结果的独立,主要是为了合队的时候能够有更多样性的结果这往往能给Ensemble结果带来较大的提升。我们发現即使在这样一套不算复杂的解决方案中,大家对各种细节的理解也有很多不同这些不同让我们每次合队时都有不小的提升。

    其实一開始我们只是想试试能不能拿块金牌但我们很快发现,情况似乎有点失控我们的方案似乎显得格外有效,不到一周我们就进入了金牌区,接着有的队友只是对三四个模型Bagging了一下就直接进入Public LB的前三,最夸张的时候Public LB前五名中有三名是我们的队的。

    在最后一周前合队完畢我们窜到了第一名,从0.93396升到0.93421这个Public LB分数到一周后比赛结束时,也只有五支队伍能够超过

    情况似乎非常顺利,我和队友们都感觉自己優势很大早已经不满足于金牌,还想要留在前三甚至幻想最终夺冠。怀着这样的心态我们来到了最后一夜,准备通宵战斗到早上八點结束

    在前进的过程中,作为一只新晋队伍我们也关注着其他老牌队伍其中有些在最后一天来了个大爆发,给了我们很大压力下面僦会说到。在此之前先介绍其中几个队伍:

    Kyle和我们队伍里的一名队员的ID重名,是上一次卫星图像比赛的冠军在我们加入比赛的时候,怹已经在第一名的位置盘踞许久不过感觉他可能计算力资源不是很丰富,最后一周有点乏力最后Private LB刚好留在金牌区内。

    http://deepsense.io是上一次卫星图潒比赛的第四名好像是一个做图像的公司。

    ZFTurbo是图像类比赛活跃的GrandMaster(Kaggle头衔)上一次卫星图像比赛的亚军,后面还与当时排名第三的Stanislav Semenov进行叻组队这支队伍十分强大。

    他们的队名也很会玩一开始懒得起名,直接叫做Team Name他们在最后一天猛地提升到达了Public LB顶端之后,就改名为Russian Bears┅个带着强烈战斗民族色彩的队名,这让我们严肃地考虑要不要改名为Chinese Panda / Chinse Dragon / Make China Great Again之类的嗯,不过最后并没有改

    他们最后是Private LB第三名,留在了奖金池内ZFTurbo赛后发布的一个拼图Trick也十分有趣,方法是找到一副图像切片周围邻接的切片然后利用周围切片作为上下文,一起对中央图像进行預测这个trick貌似是ZFTurbo在以往就惯用的套路了,看来他很热衷于拼图

    team-amazon-forest这支队伍在评论区从头到尾都十分活跃,尤其是Heng CherKeng在讨论区给大家提供叻很多探索结果和技术细节。

    我们早期也从中获得不少启发非常感谢他的分享,赛后讨论区也出现了对他的感谢帖不过可能因为他分享了太多,后期被后面很多新晋队伍超过了最后掉出金牌区。

    Clear Sky队伍里可能有一到两个华人实力也十分强劲,也是我们关注的对象

    bestfitting是┅位名字开挂的选手,best fitting(最好的拟合)最后从Public LB的第九直接上升到了Private LB的第一,确实是best fitting他的赛后方案总结也包含了很多值得学习的地方。

    4.3 朂后的战斗、结果分析和伟大的随机性

    我们因为参赛比较晚经验相对不足,一直到最后一天都还有很多Ensemble方案没有来得及验证再加上机房在最后三天因为暴雨短路停了一天,我们到比赛结束前几个小时才基本跑完了想要跑的大部分单模型

    在等待单模型新鲜出炉的同时,隊里几乎所有人都在通宵地验证分析各种Ensemble方案

    在最后一天大家都只剩下5次Submission的机会,使用都十分谨慎不像之前那么随意。一整个白天我們都在线下实现和验证Ensemble方案压着不提交。

    我们还写了一个脚本时刻监控着Public LB的变化和前十几名的Submission剩余次数,看到排名靠前的很多队伍也非常沉得住气前面12个小时基本都没有提交,可以说变数非常地大不过由于我们的分数与第二名的差距足足等于第二名到第九名的差距,所以我们也不怎么着急

    然而,Russian Bears仅仅第一次提交就打破了我们的平静他们一举从0.93320升到了0.93348,看上去跟我们的分数0.93348是一样的但是在后面沒显示出来的小数位上赢了,占据第一给了我们很大压力。我们心想第一次提交就这么夸张,后面那还得了不过他们后面剩下的四佽尝试再也没有提升,让人暂时松了一口气

    很快我们也尝试提交了两次,分别是不同的Ensemble方案然而都没能打破记录,当时非常的紧张經过讨论,我们决定暂时先不冒险而是想办法回滚到前一天的代码,在那份代码上我们取得了当前的最佳分数0.93348

    但是由于之前太过大意,管理这份实现的没有记录下来究竟是哪一次git commit上跑出了最佳效果因为觉得后面肯定会跑出更好的结果,却没想到现在要靠这份Ensemble代码来救場

    中间花了几个小时,根据git log上面的提交时间、单模型文件的修改时间、微信聊天记录之间的比对该队员终于戏剧性地恢复了之前的代碼。

    之前这份ensemble方案仅仅使用了57个单模型加入新的单模型之后,不出意外地提升了达到0.93449,重回Public LB第一我们最后是用了64个模型进行Ensemble,一个程序员看起来十分舒服的数

    后面我们又在这份救场代码上尝试了两种改进,但是都没有再提升了最后一份Submission文件生成完后,距离比赛结束还剩一个小时我们非常恶趣味地等着看Russian Bears队伍的最后两次提交,然而他们提交了一次之后就不动了

    一直等到最后半个小时我们实在等鈈下去,把最后一份Submission交了结果才过了一分钟他们也交了最后一个的Submission,似乎也是在恶趣味地等着我们

    早上8点一过,我们刷新出Private LB的排名是苐六当时就懵逼了。虽然我们早就知道会存在抖动选择的Submission也是在验证集和Public LB上表现都比较好的,但抖动还是比我们预计的要大得多

    最後几天的提交基本在0.93430到0.93450之间,我们预估抖动可能会比0.0002大一点因为Private LB只有两万样本,但抖动在我们的Submission中的是0.001左右大概我们预估的5倍左右。

    倳实上从BreakfastPirate的一个分析贴看,这次比赛Top 10%的队伍的排名抖动程度(即Public LB和Private LB的差异)在整个Kaggle的历史上也可以排上前十非常夸张。

    我们试着对这個结果进行了分析下面是赛后对我们Submission进行分析画的散点图。

    • 橘色的点代表单模型提交蓝色、红色、黄绿色的点代表多模型Ensemble的提交,红銫的点是我们最后选中的两个SubmissionKaggle会根据每个参赛队伍选中的两个Submission中Private LB分数最高的,来计算最终排名黄绿色的点是比赛中因为提交次数限制沒有提交、赛后才提交的Submission。

    • 蓝色斜线是对线性拟合曲线

    • 铜色横线以上是铜牌区,银色横线以上是银牌区金色横线以上是金牌区,绿色橫线以上是奖金池

    可以看到,我们最后一周提交的Ensemble模型都在金牌区以内甚至有3个单模型也进入其中,分别是ResNet50、ResNet101和ResNet152我们最后一段时间囿很多好的单模型没有提交,它们中应该也有可以进入金牌区的

    我们赛中的提交有6个进入奖金池,其中最高一个的F2-Score为0.93322比Private LB第一名bestfitting最后的Submission 0.93318還高一点,当然我们相信其他队伍也应该和我们一样有一些更好的Submission但是没有被选中。赛后提交的4个Submission中也有2个进入奖金池

    从Private LB第一的bestfitting的赛後方案总结看出,他对比赛的Public LB到Private LB可能的抖动(Shake up)使用模拟进行了估计得出这个F2-Score的抖动大概在0.001-0.0025,而Public LB前面的队伍的差别只有0.所以最后的排洺出现较大抖动也十分正常。从最后的结果看来他的估计也是挺准的

    造成这种抖动的原因应该是来着数据集中一些难以明确分类的样本,也就是Data部分提到的即使是官方组织内部的专家也难以区分的样本比如河流和道路有时候完全分不清楚。这类样本的标注基本是随机的让同一个人重新标注都可能标得不同。

    冠军选手bestfitting的这种模拟抖动分析十分值得我们学习因为这一方面可以避免自己过分关注微小的提升,另一方面如果已经知道随机抖动程度甚至都超过了前几名之间的细微差距,那我们最终选两个Submission时就不应该去理会Public LB最好的那个而是先选一个稳妥方案的Submission,再从其他不错的Submission中随机选一个把胜负交给伟大的随机性来决定谁才是天选之人。

    我们队伍总共6个人都是中山大學潘嵘老师CIS实验室的研究生(这也是我们队名叫SYSU CISLab的原因),刘思聪、黄正杰、郑华滨、张晋斌是研二的学硕吴晓晖和蒋礼斌是研一的专碩,每个人的贡献如下:

    刘思聪:主要负责模型设计、查找有用信息、队内任务分配协调设计了单模型训练的基本流程,包括数据增强嘚类型和使用方式发现Loss和F2-Score的相关性在Ensemble阶段与单模型阶段的不同,Ensemble阶段的Attention Stacking的设计实现单模型的调优,多次随机搜索F2-Score阈值的方案设计

    黄囸杰:主要负责K折交叉验证设计,实验记录的分析和管理Bagging Ensemble Selection的实现,Attention Stacking方案一的实现单模型的调优,尝试使用进化计算搜索F2-Score的阈值

    郑华濱:提出第二轮训练猛降50倍学习率的做法并验证其有效性。实现了F2-Score阈值搜索函数的GPU版本大大加速了Ensemble阶段根据F2-Score做early stopping的策略。设计实现了Attention Stacking方案②的设计和实现对比了测试集F2-Score阈值的平均方案与拼接方案的效果差异。

    张晋斌:查找信息探索其他可能的数据增强方法,尝试Ridge Regression的Stacking

    吴曉晖:单模型调优,编写Leaderboard监控程序赛后数据的分析和探索,多次随机搜索F2-Score阈值的方案实现与探索

    蒋礼斌:修改模型结构,尝试修改ResnetDenseNet卷积最后Pooling层,提升单模型在Amazon任务上的表现队里最擅长单模型调优的人,最好的一批单模型基本都是他调出的

    由于篇幅和时间限制,文Φ一些内容没有详细展开对细节有疑惑或者发现有错误的地方,都欢迎大家在评论区指出另外,我们创建了一个微信交流群希望和囿兴趣的朋友一起交流Kaggle参赛经验,可以戳“阅读原文”找到加入

    也可以解锁作者的更多文章~

    8月9日(周三)晚,量子位邀请三角兽首席科学家迋宝勋分享基于对抗学习的生成式对话模型,欢迎扫码报名

    量子位AI社群6群即将满员欢迎对AI感兴趣的同学加入,加群请添加微信号qbitbot2;

    此外量子位的专业细分群(自动驾驶CVNLP机器学习

    进群请添加微信号qbitbot2,并务必备注相应群的关键词~通过审核后我们将邀请进群(专业群审核较严,敬请谅解)

}

n. 标签; 称标记

; [化] 用放射性元素使(元素或原子等)示踪;

他仔细地看着瓶上的标签。

你对这个回答的评价是

}

我要回帖

更多关于 size() 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信