{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install pretrainedmodels","execution_count":2,"outputs":[{"output_type":"stream","text":"Collecting pretrainedmodels\n\u001b[?25l  Downloading https://files.pythonhosted.org/packages/84/0e/be6a0e58447ac16c938799d49bfb5fb7a80ac35e137547fc6cee2c08c4cf/pretrainedmodels-0.7.4.tar.gz (58kB)\n\u001b[K    100% |████████████████████████████████| 61kB 2.3MB/s ta 0:00:011\n\u001b[?25hRequirement already satisfied: torch in /opt/conda/lib/python3.6/site-packages (from pretrainedmodels) (1.0.1.post2)\nRequirement already satisfied: torchvision in /opt/conda/lib/python3.6/site-packages (from pretrainedmodels) (0.2.2)\nRequirement already satisfied: munch in /opt/conda/lib/python3.6/site-packages (from pretrainedmodels) (2.3.2)\nRequirement already satisfied: tqdm in /opt/conda/lib/python3.6/site-packages (from pretrainedmodels) (4.31.1)\nRequirement already satisfied: numpy in /opt/conda/lib/python3.6/site-packages (from torchvision->pretrainedmodels) (1.16.3)\nRequirement already satisfied: six in /opt/conda/lib/python3.6/site-packages (from torchvision->pretrainedmodels) (1.12.0)\nRequirement already satisfied: pillow>=4.1.1 in /opt/conda/lib/python3.6/site-packages (from torchvision->pretrainedmodels) (5.1.0)\nBuilding wheels for collected packages: pretrainedmodels\n  Building wheel for pretrainedmodels (setup.py) ... \u001b[?25ldone\n\u001b[?25h  Stored in directory: /tmp/.cache/pip/wheels/69/df/63/62583c096289713f22db605aa2334de5b591d59861a02c2ecd\nSuccessfully built pretrainedmodels\nInstalling collected packages: pretrainedmodels\nSuccessfully installed pretrainedmodels-0.7.4\n\u001b[33mYou are using pip version 19.0.3, however version 19.1.1 is available.\nYou should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"%reload_ext autoreload\n%autoreload 2\n%matplotlib inline\nimport os\nfrom fastai.vision import *\nfrom fastai.utils import mem\nfrom fastai.callbacks import ReduceLROnPlateauCallback, SaveModelCallback\nfrom sklearn.metrics import f1_score\nfrom fastai.vision.learner import model_meta\nimport pretrainedmodels\nprint('Make sure cuda is installed:', torch.cuda.is_available())\nprint('Make sure cudnn is enabled:', torch.backends.cudnn.enabled)\nmem.gpu_mem_get()","execution_count":1,"outputs":[{"output_type":"error","ename":"ModuleNotFoundError","evalue":"No module named 'pretrainedmodels'","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)","\u001b[0;32m<ipython-input-1-1d656a5f99ce>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mf1_score\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfastai\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvision\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearner\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmodel_meta\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpretrainedmodels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Make sure cuda is installed:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_available\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Make sure cudnn is enabled:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackends\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcudnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menabled\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pretrainedmodels'"]}]},{"metadata":{"trusted":false},"cell_type":"code","source":"#!kaggle competitions download -c iwildcam-2019-fgvc6","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv')\ntrain = train[['file_name', 'category_id']]\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"test = pd.read_csv('../input/test.csv')\ntest = test[['file_name']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"PATH = '../input/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"datatest = ImageList.from_df(test, path=PATH, cols=0, folder='test_images')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def get_data(bs, size):\n    return (ImageList.from_df(train, path=PATH, cols=0, folder='train_images')\n     .split_by_rand_pct(0.2, seed=47)\n     .label_from_df(cols=1)\n     .transform(get_transforms(xtra_tfms=[pad(mode='reflection')]), size=size)\n     .add_test(datatest)\n     .databunch(bs=bs)) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"data = get_data(128, 32)\n#stats = data.batch_stats()\ndata.normalize(imagenet_stats)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"data.show_batch()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"class FocalLoss(nn.Module):\n    def __init__(self, alpha=1., gamma=1.):\n        super().__init__()\n        self.alpha = alpha\n        self.gamma = gamma\n\n    def forward(self, inputs, targets, **kwargs):\n        CE_loss = nn.CrossEntropyLoss(reduction='none')(inputs, targets)\n        pt = torch.exp(-CE_loss)\n        F_loss = self.alpha * ((1-pt)**self.gamma) * CE_loss\n        return F_loss.mean()\n\nloss_func = FocalLoss(gamma=1.)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def senet154(pretrained=False):\n    pretrained = 'imagenet' if pretrained else None\n    model = pretrainedmodels.senet154(pretrained=pretrained)\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"_se_resnet_meta = {'cut': -3, 'split': lambda m: (m[0][3], m[1]) }\nmodel_meta[senet154] = _se_resnet_meta","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn = create_cnn(data, senet154,  ps=0.5, wd=1e-1, loss_func=loss_func, metrics=[FBeta()], pretrained=True).to_fp16().mixup()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"learn.lr_find()"},{"metadata":{},"cell_type":"markdown","source":"learn.recorder.plot(suggestion=True)"},{"metadata":{"trusted":false},"cell_type":"code","source":"lr = 4.79E-02","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"RLR = ReduceLROnPlateauCallback(learn, monitor='f_beta',patience = 2)\nSAVEML = SaveModelCallback(learn, every='improvement', monitor='f_beta', name='best')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#learn.fit_one_cycle(5, lr, callbacks = [RLR, SAVEML])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.recorder.plot_losses() ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.save('se-1')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load('best')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.unfreeze()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#learn.fit_one_cycle(5, slice(1e-5,1e-3), callbacks = [RLR, SAVEML])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load('best')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.save('se-2')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.recorder.plot_losses() ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Validation"},{"metadata":{"trusted":false},"cell_type":"code","source":"pred, y = learn.get_preds()\n#pred, y = learn.TTA()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"f1_score = f1_score(y, np.argmax(pred.numpy(), 1), average='macro')  \nf1_score","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Inference\nhttps://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb"},{"metadata":{"trusted":false},"cell_type":"code","source":"#learn = learn.to_fp32()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#pred_t, _ = learn.TTA(ds_type=DatasetType.Test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#import os\n#test_ids = [os.path.basename(f)[:-4] for f in learn.data.test_ds.items]\n#subm = pd.read_csv('sample_submission.csv')\n#orig_ids = list(subm['Id'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#pred_t2 = np.argmax(pred_t.numpy(), 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def 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(f'submission_{f1_score}.csv', header=True, index=False)\n    return df","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#sub = create_submission(orig_ids, test_ids, pred_t2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#sub.tail()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#! kaggle competitions submit -c iwildcam-2019-fgvc6 -f submission_0.5804866967400385.csv -m densenet","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.8"}},"nbformat":4,"nbformat_minor":1}