kaggle竞赛报告:APTOS 2019 Blindness
2019-07-07 本文已影响0人
深度学习模型优化
记录比赛过程中的所思所想。
1 基线模型
1.1 model 1
地址为
Intro APTOS Diabetic Retinopathy (EDA & Starter)。
这个代码主要使用的是fastai的框架。
1.2 model 2
地址为baseline-APTOS 2019 Blindness Detection。
1.3 model 3
2 基线模型的改进
2.1 数据
存在严重的训练 样本不均衡的问题。
两种方法
- 将前几年比赛的数据加入进来。
- 数据增广
2.2 模型
想使用EfficientNet来做训练,这个有现成脚本,但是需要进行模型的预训练,训练和推理也要分开在两个kernel上跑。但是7月1日的早上,看到了大佬的新kernel,于是乎,果断的fork。爽!
在大佬的基础上在做一些TTA,以期望提高识别效果。当然是用EN已经感觉将会有很大的提高。
使用sklearn的
2.3 损失函数
使用Focal Loss来平衡难易样本。
2.4 模型的trick
因为本地没有比较强的算力,所以使用kaggle的kernel来计算结果。
这里使用3个kernel同时运算,计算结果,将所有的结果都输出,然后放到一个脚本中去做推理。
- 回调函数
在fastai框架中使用了early stop和记录最优模型的回调函数,
先总结下fastai的重要回调函数:
详细内容可以参考这里。
- TerminateOnNaNCallback
learn = Learner(data, model, metrics=[accuracy], callbacks=[TerminateOnNaNCallback()])
- EarlyStoppingCallback
learn = Learner(data, model, metrics=[accuracy],
callback_fns=[partial(EarlyStoppingCallback, monitor='accuracy', min_delta=0.01, patience=3)])
- SaveModelCallback
learn.fit_one_cycle(5,1e-4, callbacks=[SaveModelCallback(learn, every='epoch', monitor='accuracy', name='model')])
- ReduceLROnPlateauCallback
回调函数在fastai中的使用倒还好,这个focal loss在fastai设置的就问题多了。如果真正想灵活使用fastai还是要将pytorch的基础知识和fastai的代码框架弄明白。
在fastai用的不是很6的情况下,可以使用keras和pytorch在kaggle比赛中使用各种灵活的方法。
2)损失函数
本来使用Focal和Fbeta一起是否会更好一点。