{"cells":[{"metadata":{"trusted":true,"_uuid":"909d92d47c72f549abd51fe6849b192e42cad074"},"cell_type":"code","source":"#Allows you to save your models somewhere without\n# copying all the data over.\n# Trust me on this.\n\n!mkdir input\n!cp /kaggle/input/train_labels.csv input\n!cp /kaggle/input/sample_submission.csv input\n!ln -s /kaggle/input/train/ input/train\n!ln -s /kaggle/input/test/ input/test","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"from fastai.vision import *","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50c400adaa05f4a8fbcff22acd2ed8ccdac2127a","scrolled":true},"cell_type":"code","source":"tfms = get_transforms(flip_vert=True, max_warp=0, max_zoom=0, p_affine=0, max_rotate=0)\ntfms[0][0].kwargs = {}\ntfms[0][1] = dihedral()\ntfms","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1d0e9eca1dc20fb54820d4c03671b33c26ae8f3b"},"cell_type":"code","source":"from sklearn.model_selection import KFold\n\ndef data_gen(n_folds):\n    il = ImageItemList.from_csv(csv_name='train_labels.csv', path='input', folder='train', suffix='.tif')\n    \n    idxs = array(range(len(il)))\n    np.random.shuffle(idxs)\n    kfold = KFold(n_splits=n_folds, shuffle=True)\n    \n    for curr_fold in kfold.split(idxs):\n        val_idx = idxs[curr_fold[1]]\n        db_split = (il\n                    .split_by_idx(val_idx)\n                    .label_from_df()\n                    .transform(tfms, size=96)\n                    .add_test_folder('test')\n                    .databunch(bs=64)\n                    .normalize(imagenet_stats))\n        yield db_split\n        \ndef get_output(db):\n    learn = create_cnn(db, models.resnet50, metrics=[error_rate])\n    learn.fit_one_cycle(4, max_lr=1e-2)\n    learn.unfreeze()\n    learn.fit_one_cycle(2, max_lr=slice(1e-5,1e-4))\n    probs, _ = learn.TTA(ds_type=DatasetType.Test)\n    preds = probs[:,1]\n    return preds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e62bf7ea5b4dfa1e1674a3d073afdca642e6885b","scrolled":false},"cell_type":"code","source":"n_folds = 4\n\nsum_preds = None\ngen = data_gen(n_folds)\nfor db in gen:\n    preds = get_output(db)\n    if sum_preds is None:\n        sum_preds = preds\n    else:\n        sum_preds += preds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b894944fa1cf9b9faea4514167d8080911c278b8"},"cell_type":"code","source":"preds = sum_preds / n_folds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7698760c90a0d36196cb00211fd934d84d7a2f9d"},"cell_type":"code","source":"test_df = pd.read_csv('./input/sample_submission.csv')\ntest_df['id'] = [i.stem for i in db.test_ds.items]\ntest_df['label'] = preds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9d17c11e7e0eb8b22ffc032f64cb2a6a27d6c2aa"},"cell_type":"code","source":"test_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d0b543a68397b53d0ab46073c188e7e9ba5637ee"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}