記錄比賽過(guò)程中的所思所想。
1 基線模型
1.1 model 1
地址為
Intro APTOS Diabetic Retinopathy (EDA & Starter)。
這個(gè)代碼主要使用的是fastai的框架。
1.2 model 2
地址為baseline-APTOS 2019 Blindness Detection。
1.3 model 3
2 基線模型的改進(jìn)
2.1 數(shù)據(jù)
存在嚴(yán)重的訓(xùn)練 樣本不均衡的問(wèn)題。
兩種方法
- 將前幾年比賽的數(shù)據(jù)加入進(jìn)來(lái)。
- 數(shù)據(jù)增廣
2.2 模型
想使用EfficientNet來(lái)做訓(xùn)練,這個(gè)有現(xiàn)成腳本,但是需要進(jìn)行模型的預(yù)訓(xùn)練,訓(xùn)練和推理也要分開(kāi)在兩個(gè)kernel上跑。但是7月1日的早上,看到了大佬的新kernel,于是乎,果斷的fork。爽!
在大佬的基礎(chǔ)上在做一些TTA,以期望提高識(shí)別效果。當(dāng)然是用EN已經(jīng)感覺(jué)將會(huì)有很大的提高。
使用sklearn的
2.3 損失函數(shù)
使用Focal Loss來(lái)平衡難易樣本。
2.4 模型的trick
因?yàn)楸镜貨](méi)有比較強(qiáng)的算力,所以使用kaggle的kernel來(lái)計(jì)算結(jié)果。
這里使用3個(gè)kernel同時(shí)運(yùn)算,計(jì)算結(jié)果,將所有的結(jié)果都輸出,然后放到一個(gè)腳本中去做推理。
- 回調(diào)函數(shù)
在fastai框架中使用了early stop和記錄最優(yōu)模型的回調(diào)函數(shù),
先總結(jié)下fastai的重要回調(diào)函數(shù):
詳細(xì)內(nèi)容可以參考這里。
- 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
回調(diào)函數(shù)在fastai中的使用倒還好,這個(gè)focal loss在fastai設(shè)置的就問(wèn)題多了。如果真正想靈活使用fastai還是要將pytorch的基礎(chǔ)知識(shí)和fastai的代碼框架弄明白。
在fastai用的不是很6的情況下,可以使用keras和pytorch在kaggle比賽中使用各種靈活的方法。
2)損失函數(shù)
本來(lái)使用Focal和Fbeta一起是否會(huì)更好一點(diǎn)。