{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"from fastai.vision import *\nfrom fastai.metrics import error_rate\nimport pandas as pd\nfrom pathlib import Path\nfrom sklearn.metrics import f1_score","execution_count":18,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"%reload_ext autoreload\n%autoreload 2\n%matplotlib inline","execution_count":19,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\")\ntrain = train[[\"file_name\", \"category_id\"]]\n#train.head()\n\ntest = pd.read_csv('../input/test.csv')\ntest = test[['file_name']]\n\nPATH = Path('../input')\npath_test = PATH/\"test_images\"\npath_train = PATH/\"train_images\"\n#PATH = \"../input/\"","execution_count":20,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_sub = train[:10000]\ntest_sub = test[:1000]\n#print(train_sub.head())\n#print(test_sub.head())","execution_count":21,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"datatest = ImageList.from_df(test, path=path_test, cols=0)\ndatatest_sub = ImageList.from_df(test_sub, path=path_test, cols=0)","execution_count":22,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#tfms = get_transforms(do_flip=False)\n#data = ImageDataBunch.from_df(path_train, train, ds_tfms=tfms, size=500)\n#PATH = '../input/'\ndata = (ImageList.from_df(train, path=path_train, cols=0)\n        .split_by_rand_pct(0.2, seed=47)\n        .label_from_df(cols=1)\n        .transform(get_transforms(), size = 128)\n        #.transform(get_transforms(xtra_tfms=[pad(mode='reflection')]), size = 128)\n        .add_test(datatest).databunch(bs=32)\n        .normalize(imagenet_stats))","execution_count":42,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#data.show_batch(rows=3, figsize=(7,6))\n#data.classes","execution_count":24,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn = cnn_learner(data, models.resnet50, metrics = accuracy, model_dir=\"/tmp/model/\")\n#learn = cnn_learner(data, models.resnet34, metrics= accuracy, model_dir=\"/tmp/model/\")","execution_count":43,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.lr_find()\nlearn.recorder.plot()","execution_count":44,"outputs":[{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":""},"metadata":{}},{"output_type":"stream","text":"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n","name":"stdout"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.unfreeze()\nlearn.fit_one_cycle(5, max_lr=slice(1e-4,1e-2))","execution_count":46,"outputs":[{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":"<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: left;\">\n      <th>epoch</th>\n      <th>train_loss</th>\n      <th>valid_loss</th>\n      <th>accuracy</th>\n      <th>time</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>0</td>\n      <td>1.170948</td>\n      <td>55.233326</td>\n      <td>0.680500</td>\n      <td>03:53</td>\n    </tr>\n    <tr>\n      <td>1</td>\n      <td>1.043972</td>\n      <td>2.066208</td>\n      <td>0.712500</td>\n      <td>03:54</td>\n    </tr>\n  </tbody>\n</table>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.save(\"fit_1\")","execution_count":28,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#interp = ClassificationInterpretation.from_learner(learn)\n#losses,idxs = interp.top_losses()\n#interp.plot_top_losses(9, figsize=(15,11))\n#interp.plot_confusion_matrix(figsize=(12,12), dpi=60)\n#interp.most_confused(min_val=2)[:5]","execution_count":29,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#pred, y = learn.get_preds()\n#f1_score = f1_score(y, np.argmax(pred.numpy(), 1), average=\"macro\"); f1_score","execution_count":30,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\n#pred_t, _ = learn.TTA(ds_type=DatasetType.Test)\npred_t, _ = learn.get_preds(ds_type=DatasetType.Test)\n","execution_count":31,"outputs":[{"output_type":"stream","text":"CPU times: user 1.12 s, sys: 268 ms, total: 1.39 s\nWall time: 20.1 s\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = torch.topk(pred_t, 1)\n\npredictions = []\n\nfor i in results[1].numpy():\n    for j in i:\n        predictions.append(data.classes[j])\n","execution_count":47,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\n\nsubm = pd.read_csv('../input/sample_submission.csv')\norig_ids = list(subm['Id'])\ntest_ids = [os.path.basename(f)[:-4] for f in learn.data.test_ds.items]\n\n#orig_ids = list(set(orig_ids).intersection(test_ids))\n\ndef create_submission(orig_ids, test_ids, preds):\n    preds_dict = dict((k, v) for k, v in zip(test_ids, preds))\n    pred_cor = [preds_dict[id] for id in orig_ids]\n    df = pd.DataFrame({'id':orig_ids,'Predicted':pred_cor})\n    df.to_csv('submission.csv', header=True, index=False)\n    return df\n","execution_count":48,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub = create_submission(orig_ids, test_ids, predictions)\n#sub.head()","execution_count":49,"outputs":[{"output_type":"execute_result","execution_count":49,"data":{"text/plain":"                                     id  Predicted\n0  cc4a6c08-2bf6-11e9-bcad-06f10d5896c4          0\n1  e0845e47-2bf6-11e9-bcad-06f10d5896c4          0\n2  eda12c46-2bf6-11e9-bcad-06f10d5896c4          0\n3  d49ba421-2bf6-11e9-bcad-06f10d5896c4          0\n4  dcee3529-2bf6-11e9-bcad-06f10d5896c4          0","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>Predicted</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>cc4a6c08-2bf6-11e9-bcad-06f10d5896c4</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>e0845e47-2bf6-11e9-bcad-06f10d5896c4</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>eda12c46-2bf6-11e9-bcad-06f10d5896c4</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>d49ba421-2bf6-11e9-bcad-06f10d5896c4</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>dcee3529-2bf6-11e9-bcad-06f10d5896c4</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}