{"cells":[{"metadata":{"id":"xJEooMZqAFzd","colab_type":"text"},"cell_type":"markdown","source":"# Import Cool Stuff"},{"metadata":{"id":"CjczZ2iiFZR9","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"%reload_ext autoreload\n%autoreload 2\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"id":"cKSY2iAlFiQc","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from fastai import *\nfrom fastai.vision import *\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport os\nimport scipy as sp\nimport torch\nfrom functools import partial\nfrom sklearn import metrics\nfrom collections import Counter\nfrom fastai.callbacks import *\n\nimport PIL\nimport cv2","execution_count":null,"outputs":[]},{"metadata":{"id":"w_p8Y6QLACHH","colab_type":"text"},"cell_type":"markdown","source":"\n# Create Databunch\n\n"},{"metadata":{"id":"0m-Zn9MX_83n","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"path = Path('../input/aptos2019-blindness-detection')","execution_count":null,"outputs":[]},{"metadata":{"id":"yUnh3w66BWgv","colab_type":"code","outputId":"f2a6f00c-15a9-4e66-e51d-d99bfe1615b8","colab":{"base_uri":"https://localhost:8080/","height":197},"trusted":true},"cell_type":"code","source":"df = pd.read_csv(path/'train.csv')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"mQf-cHmdrsS2","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"src = (\n         ImageList.from_df(df, path, folder='train_images', suffix='.png')\n        .split_by_rand_pct(0.2, seed=42)\n        .label_from_df(cols='diagnosis', label_cls=FloatList)    \n        )","execution_count":null,"outputs":[]},{"metadata":{"id":"bGBnjjNW8dpA","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"tfms = get_transforms(do_flip=True, flip_vert=True, max_rotate=0.10, max_zoom=1.3, max_warp=0.0, max_lighting=0.2)","execution_count":null,"outputs":[]},{"metadata":{"id":"F-okNnAM8f9N","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"data = (\n    src.transform(tfms,size=128)\n    .databunch()\n    .normalize(imagenet_stats)\n)","execution_count":null,"outputs":[]},{"metadata":{"id":"JX2k2frGk1pb","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"# Definition of Quadratic Kappa\nfrom sklearn.metrics import cohen_kappa_score\ndef quadratic_kappa(y_hat, y):\n    return torch.tensor(cohen_kappa_score(torch.round(y_hat), y, weights='quadratic'),device='cuda:0')","execution_count":null,"outputs":[]},{"metadata":{"id":"NGP1Tz5N_-Uu","colab_type":"text"},"cell_type":"markdown","source":"# Train your CNN"},{"metadata":{"trusted":true},"cell_type":"code","source":"!mkdir -p /tmp/.cache/torch/checkpoints\n!cp ../input/resnet50/resnet50.pth /tmp/.cache/torch/checkpoints/resnet50-19c8e357.pth","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn = cnn_learner(data, models.resnet50, metrics=[quadratic_kappa], model_dir = Path('../kaggle/working'),\n                   path = Path(\".\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"lr = 1e-3\nlearn.fit_one_cycle(4, lr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.lr_find()\nlearn.recorder.plot(suggestion=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.unfreeze()\nlr = slice(1e-4, 1e-3)\nlearn.fit_one_cycle(6, max_lr=lr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.fit_one_cycle(2, max_lr=lr)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Resize Data and Continue Training"},{"metadata":{"trusted":true},"cell_type":"code","source":"data = (\n    src.transform(tfms,size=224)\n    .databunch()\n    .normalize(imagenet_stats)\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.data = data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"lr = 1e-3\nlearn.fit_one_cycle(4, lr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.lr_find()\nlearn.recorder.plot(suggestion=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"lr = 1e-5\nlearn.fit_one_cycle(4, max_lr=lr)","execution_count":null,"outputs":[]},{"metadata":{"id":"7bBmiFD9qit6","colab_type":"text"},"cell_type":"markdown","source":"# Create Predictions"},{"metadata":{"id":"krlVbyM5tpxf","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":197},"outputId":"2bc61e37-dc07-4a4b-c880-36d027399c98","trusted":true},"cell_type":"code","source":"sample_df = pd.read_csv(path/\"sample_submission.csv\")\nsample_df.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"q1k4hb74q4n6","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"learn.data.add_test(ImageList.from_df(sample_df, path, folder='test_images', suffix='.png'))","execution_count":null,"outputs":[]},{"metadata":{"id":"FlW2FE2Eu4s2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":302},"outputId":"de562963-c17e-487a-be47-96f27d3e9f23","trusted":true},"cell_type":"code","source":"preds,y = learn.get_preds(DatasetType.Test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"int_preds = [int(x) for x in preds]\nsample_df.diagnosis = int_preds\nsample_df.head()\nsample_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"colab":{"name":"APTOS-Blindness.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":1}