kaggle-浮游生物分类比赛一等奖---译文(第三部分)
来源:互联网 发布:易语言小游戏源码 编辑:程序博客网 时间:2024/05/01 19:21
接着上一篇的内容
model averaging
我们将多个模型融合的结果作为最后提交的内容
1)Test-time augmentation
对于每一个单独的模型,我们使用不同的augmentation得到不同的预测结果,然后将这些结果融合,这对performence的提升有很大的帮助。我们将Test-time augmentation简写为TTA。
开始的时候,我们使用人工创造的仿射变换(affine transformations )数据集应用于每一张图片来进行augmentation,这样比随机的选择参数进行augmentation得到的performence要更好。接下来,我们寻找更好的augmentation的方法,最终确定使用quasi-random 进行70次转换,采用比训练时更加modest的参数。
使用TTA得到预测结果花费大约12小时。
2)Finding the optimal transformation instead of averaging
观察到上述TTA过程相对的提高了performence,我们在想有没有可能在预测的时候继续优化augmentation的参数。这是有可能的,因为仿射变换本身随着参数的不同而不同,也就是说具有可区分性。
为了做到这一点,我们将仿射变换(affine transformations )作为网络的layer,这样的话网络在训练的时候,就能通过BP来更新augmentation的参数。但是求导有些复杂。
我们尝试了几个不同的方法来寻找优化的augmentation:
- 优化augmentation的参数来最大化预测结果的置信度
- 训练一个卷积网络来预测augmentation的参数,然后传递给另外一个卷积网络使用。
不幸的是这些方法都没有提升performence,我们在我们提交的结果中没有采用这个方法,但是我们以后会进一步的研究。
3)Combining different models
我们总共训练的模型超过300个,所以我们必须从中选择好模型然后进行最终的融合。我们使用validation数据集来选择模型。我们优化模型的参数来减小模型在训练时的loss。
我们有规律的测试一些top-weights模型融合后的整体perforemence,然后在test数据集上进行预测。最后,大致的找到了融合模型的idea。
一旦融合模型选择好后,我们将他们均匀融合,或者用validation数据集来优化weighs。两种方法得到的performence不相上下。
选择要进行融合的模型并不一定是TTA过程中performence表现好的。一些performence很低也可以被选中,因为这些模型得到的预测结果与其他模型差异非常大。一些由于overfitting而performence低的模型也可以用来融合,因为模型的融合可以减小overfitting。
4)Bagging
为了更好的提升融合模型的performence,我们将其中的某些模型(大部分5个)用由不同的子数据集训练得到的模型代替。
Miscellany
下面这些是我们尝试的其他一些方法,不同的方法有不同的提升效果:
- untied biases:提升的performence微乎其微
- 在FC层用winner take all nonlinearity (WTA)取代Relus/maxout。
- smooth nonlinearities:用smooth nonlinearities取代LRelu,得到的performence更差。
- specialist models:对于一些难以进行分类的类别,我们使用了额外的模型来训练,使用了包括 knowledge distillation和self-informed neural network structure learning 两种方法,但是都没有得到更好的performence。
- batch normalization: 遗憾的是我们没有获得和Ioffe and Szegedy 描述的一样的效果.
- 使用 FaMe regularization ,效果没有dropout好。
- 使用 Reed描述的 Semi-supervised learning 没有得到更好的performence,也没有降低overfitting。
下面是一些我们测试能防止overfitting的一些方法(有遗漏):
- dropout(传统以及变种)
- 好的 data augmentation
- 合适的模型结构(深度以及每一层的宽度都会影响overfitting)
- weight-decay
- 无监督预训练(unsupervised pre-training)
- cyclic pooling(特别是其中的 root-mean-square pooling)
- leaky Relu
- pseudo-labeling
我们记录了比赛期间的准确率。最好的模型在validation上的准确率为82%,top-5准确率超过98%。这使得我们可以用模型作为工具加速人工注释.
code
- kaggle-浮游生物分类比赛一等奖---译文(第三部分)
- kaggle-浮游生物分类比赛一等奖---译文(第一部分)
- kaggle-浮游生物分类比赛一等奖---译文(第二部分)
- Kaggle Titanic Competition-第三部分
- 贝叶斯分类实例(Kaggle比赛之『旧金山犯罪分类预测』)
- kaggle比赛
- kaggle系列(一、Titanic入门比赛)
- kaggle比赛集成指南
- Kaggle 比赛入门
- kaggle比赛集成指南
- Kaggle比赛知识简要
- Kaggle比赛整理
- Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛
- kaggle的手写识别比赛(python sklearn-KNN)
- state-farm-distracted-driver-detection (Kaggle 比赛总结)
- 贝叶斯(Kaggle比赛之影评与观影者情感判定)
- 2017年山东省双足机器人一等奖(四自由度)arduino源程序+比赛心得
- KAGGLE比赛中集成方法使用教程(KAGGLE ENSEMBLING GUIDE)
- HDU 2824 The Euler function [欧拉函数]
- 学习笔记--博弈组合-SG函数
- CodeForces - 621B Wet Shark and Bishops (数学几何&技巧)
- beego操作session
- jquery传参PHP的回调函数无法使用$(this)的解决办法
- kaggle-浮游生物分类比赛一等奖---译文(第三部分)
- Android 开发之AsyncTask的用法
- ECSHOP二次开发,在用户中心的订单详情页显示商品缩略图
- CSS(CS3)编码规范
- 2016蓝桥杯假期任务之《扶老奶奶过街》
- 多线程GCD的详细讲解 任务和队列(串行队列,并发队列) (一)
- python库
- DWR Server Push(服务器推技术) 实现即时聊天功能(WEB)`
- Redis集群方案redis-twemproxy-keepalived