Je participe à la compétition de kaggle APTOS 2019 et j'essaie d'assembler 5 plis, mais j'ai des problèmes avec l'implémentation correcte de StratifiedKFold.
J'ai essayé de googler sur les discussions fastai mais je ne vois pas de solutions. J'utilise la bibliothèque fastai et j'ai un modèle pré-entraîné.
def get_df():
base_image_dir = os.path.join('..', 'input/aptos2019-blindness-
detection/')
train_dir = os.path.join(base_image_dir,'train_images/')
df = pd.read_csv(os.path.join(base_image_dir, 'train.csv'))
df['path'] = df['id_code'].map(lambda x:
os.path.join(train_dir,'{}.png'.format(x)))
df = df.drop(columns=['id_code'])
df = df.sample(frac=1).reset_index(drop=True) #shuffle dataframe
test_df = pd.read_csv('../input/aptos2019-blindness-
detection/sample_submission.csv')
return df, test_df
df, test_df = get_df()
random_state = np.random.seed(2019)
skf = StratifiedKFold(n_splits=5, random_state=random_state, shuffle=True)
X = df['path']
y = df['diagnosis']
#getting the splits
for train_index, test_index in skf.split(X, y):
print('##')
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
train = X_train, y_train
test = X_test, y_test
train_list = [list(x) for x in train]
test_list = [list(x) for x in test]
data = (ImageList.from_df(df=df,path='./',cols='path')
.split_by_rand_pct(0.2)
.label_from_df(cols='diagnosis',label_cls=FloatList)
.transform(tfms,size=sz,resize_method=ResizeMethod.SQUISH,padding_mode='zeros')
.databunch(bs=bs,num_workers=4)
.normalize(imagenet_stats)
)
learn = Learner(data,
md_ef,
metrics = [qk],
model_dir="models").to_fp16()
learn.data.add_test(ImageList.from_df(test_df,
'../input/aptos2019-blindness-detection',
folder='test_images',
suffix='.png'))
Je souhaite utiliser les plis que j'ai obtenus à partir du fichier skf.split pour entraîner mon modèle, mais je ne suis pas sûr de savoir comment procéder.