本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

码报:Kaggle获奖者自述比赛求生指南:我们如何“穿越(4)

时间:2017-08-11 21:04来源:118论坛 作者:本港台直播 点击:
在out-of-fold上面进行阈值调优得到的F2-Score可以较好的代表模型的能力,可以真实地反映模型的泛化性能,多个模型的out-of-fold拼接在一起也可以作为第二阶

在out-of-fold上面进行阈值调优得到的F2-Score可以较好的代表模型的能力,可以真实地反映模型的泛化性能,多个模型的out-of-fold拼接在一起也可以作为第二阶段的集成学习的输入。

码报:Kaggle获奖者自述比赛求生指南:我们如何“穿越

在上面的5种组合上做了5次训练,测试的时候我们就有了5个模型,每个模型预测一遍测试集就得到了5个概率矩阵,每个概率矩阵的形状都是(测试集样本数x17)。

我们可以将5个概率矩阵直接求平均后做二分类预测,也可以分别做完二分类预测,再做投票,来获得最终的多类预测结果。这个结果实际上用到了所有5个折的训练数据,会更加准确,也更加稳定。

当然如果只是想用上所有数据的话,更简单的办法就是直接把整个训练集用这个模型跑一遍,再把训练好的模型模型对测试集作预测。

不过我们没有采用这第二种方式,一来,所有训练样本都被这模型“看光了”,没有额外的验证集,难以评估其泛化性能;二来,我们认为第一种方法中,5个模型的预测结果做了个简单的Ensemble,会更稳定一点。

折数划得越多,训练验证所需要的计算力和时间也就越多,最好根据问题和自身计算力做一个权衡。

3.3 深度学习还是传统方法

通过调查我们可以发现,Kaggle图像比赛现在基本被深度学习方法所统治。虽然在一些细节上传统方法还有发挥空间,但还是以CNN(卷积神经网络)为主体。

3.4 框架选择与Model Zoo

虽然之前我主用TensorFlow,不过PyTorch提供的Model Zoo使用起来很方便,代码比较轻量级,队内会用的人数也比较多,所以这次比赛我们最终采用了PyTorch作为主体框架——除了队内某个异端,他用TensorFlow为自己写了一个高效的DataLoader。

PyTorch的Model Zoo提供了AlexNet,VGG, Inceptionv3, SqueezeNet, ResNet, DenseNet等架构的预训练模型参数。我们还嫌这些模型不够用,就尝试了从TensorFlow上迁移过来的的Inception v4和Inception Res v2。

可惜的是,大概由于这两个模型走的不是“正规渠道”,是“偷渡”过来的,大概哪里出了偏差,总之训练结果一塌涂地,果断放弃。在这里我们呼吁大家支持正版。

PyTorch文档提供了不同模型在ImageNet上Top-1、Top-5的错误率,可以大概看出这些模型的能力,虽然这不一定和它们在比赛中的表现性能正相关。

在我们这次比赛中,ResNet表现最好,DenseNet紧随其后,这不是偶然的。它们有一个引人注目的共同点,就是从底层到高层有Skip-Connection,其中ResNet采用的是两路叠加,Densenet是多路拼接。

为什么重要呢?我们认为,第一是因为Skip-Connection可以自适应调节模型复杂度,避免过拟合,第二是因为17个类所利用的图像特征层次不同,比如Cloudy更偏向底层纹理特征,Water和Road更偏向高层语义,而Skip-Connection有助于让底层特征到很高层仍然保留,而不会淹没在几十层网络的变换中。

稍弱一点是VGG和Inception v3,最弱的是SqueezeNet和AlexNet。从TensorFlow上迁移过来Inception v4和Inception Res v2基本上不收敛,再次呼吁大家支持正版。

3.5 预训练或随机初始化

我们一开始在ResNet-18这个轻量级的模型分别尝试预训练参数(Pretrained)和随机初始化参数(From Scratch)进行训练,结果发现,随机初始化的模型的收敛速度比预训练的模型要慢上十倍左右,最终收敛结果也差上一截。

有队友还试着自己设计一些网络架构,但结果也远远比不上预训练模型。

所以做完这波实验后,我们也大概确定这次的比赛,跑Model Zoo将是主要的手段。听起来并不像自己设计网络结构那么激动人心,但我们也可以在上面做些一些魔改,魔改之后也取得了意料之外的提升,具体见下一节。

3.6 预训练模型使用与改动

使用预训练模型的时候要注意,PyTorch文档中说明了这些模型都是在224x224的图像上进行预训练,而且要求图片要经过归一化并减掉某个均值、除以某个方差,然后才输入模型。如果想要模型能最大程度的利用预训练的信息,一定要对我们输入图片也做同样的操作。

不过虽然模型的输入要求是224x224,但一部分模型(比如ResNet,DenseNet)的卷积层结束时会接一个Global Average Pooling,将每个通道的Feature Map求平均,这样不管输入的图片尺寸多大,经过Global Average Pooling之后Feature Map的尺寸都会变成1x1,所以理论上是可以直接使用的。

然而这里有一个坑点是,PyTorch预训练模型卷积层最后其实使用是一个7x7固定大小的Average Pooling,并不是真正的Global AveragePooling。

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容