{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install efficientnet_pytorch","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom efficientnet_pytorch import *\nfrom fastai import *\nfrom fastai.vision import *\nfrom fastai.callbacks import SaveModelCallback,MixUpCallback\nfrom sklearn.metrics import roc_auc_score,f1_score,recall_score\nfrom sklearn.model_selection import train_test_split,StratifiedKFold\nfrom pathlib import Path\nimport gc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"path = Path('/kaggle/input/melanoma-external-malignant-256')\npath128 = Path('/kaggle/input/siimisic-melanoma-classification-128')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test = pd.read_csv('../input/siimisic-melanoma-classification-128/Melonoma_cancer_tabular/Melonoma_cancer/test_final_stat.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(path/'train_concat.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"seed=101\nfolds=5\n\ntrain['kfold']=-1\ntrain = train.sample(frac=1.,random_state=seed).reset_index(drop=True)\ny = train.target.values\nkf = StratifiedKFold(n_splits=folds,shuffle=True,random_state = seed)\nfor f,(t_,v_) in enumerate(kf.split(X=train,y=y)):\n    train.loc[v_,'kfold'] = f","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_img = (ImageList.from_df(test,path=path/'test',folder='test',suffix='.jpg',cols='image_name'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_name = 'efficientnet-b3'\n\ndef get_model(model_name,n_cls):\n    model = EfficientNet.from_pretrained(model_name, num_classes=n_cls)\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def data_fold(fold):\n    \n    train_idx,valid_idx = train[train.kfold!=fold].index,train[train.kfold==fold].index\n    data = (ImageList.from_df(train,path=path/'train',folder='train',suffix='.jpg',cols='image_name')\n                     .split_by_idxs(train_idx,valid_idx)\n                     .label_from_df(cols='target') \n                     .transform(get_transforms(do_flip=True,max_zoom=1.2,flip_vert=True),size=224)\n                     .add_test(test_img)\n                     .databunch(bs=64)).normalize(imagenet_stats)\n    \n    return data\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_sc = {}\n\nfor i in range(0,folds,2):\n    \n    data = data_fold(i)\n    model_name = str('fold_'+str(i)+'__best_model')\n    arch = models.resnet50\n    learn = cnn_learner(data , arch , metrics =[AUROC()] , model_dir = '/kaggle/working').mixup().to_fp16()  \n    \n    learn.fit_one_cycle(20, slice(1e-1/2), callbacks = [SaveModelCallback(learn, every ='improvement', monitor ='auroc', name = model_name)])    \n    preds,_ = learn.get_preds(DatasetType.Test)\n    preds = preds.numpy()[:,1]\n    name = 'fold__'+str(i)\n    test_sc[name] = preds\n\n    data,learn = None,None\n    gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_sc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_sc = np.column_stack((test_sc['fold__0'],\n                           test_sc['fold__2'],                         \n                           test_sc['fold__4']                          \n                          ))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub = pd.DataFrame({ 'image_name' : test.image_name.values ,'target' : test_sc.mean(axis=1) })\nsub.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}