{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import sys","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\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nimport matplotlib.image as immg\nfrom pathlib import Path\nimport os\nimport seaborn as sns\nimport gc\nimport torchvision\nimport cv2\nfrom fastai.data.all import *\nfrom fastai.vision.core import *\nfrom fastai.vision.data import *\nfrom tqdm.notebook import tqdm\nimport zipfile\nimport io\nfrom sklearn.decomposition import PCA\nfrom fastai.vision.all import *","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Function to Create Stratified K_fold for both Regression as well as Classification"},{"metadata":{"trusted":true},"cell_type":"code","source":"path = Path('../input/cassava-leaf-disease-classification')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trn_df = pd.read_csv('../input/cassav-cleaned-df/cleaned_df.csv')\ntrn_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trn_df[trn_df.kfold==2].label.value_counts()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Train and Valid idxs"},{"metadata":{"trusted":true},"cell_type":"code","source":"trn_idx,val_idx = trn_df[trn_df.kfold!=2].index, trn_df[trn_df.kfold==2].index","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Transforms"},{"metadata":{"trusted":true},"cell_type":"code","source":"item_tfms = RandomResizedCrop(256, min_scale=0.75, ratio=(1.,1.))\nbatch_tfms = [*aug_transforms(size=256, max_warp=0), Normalize.from_stats(*imagenet_stats)]\nbs=64","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## DataLoader"},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_data(FOLD):\n    trn_idx,val_idx = trn_df[trn_df.kfold!=FOLD].index, trn_df[trn_df.kfold==FOLD].index\n    dls = ImageDataLoaders.from_df(trn_df, path, fn_col = 'image_id', folder='train_images',label_col='label',\n                                  bs=32,y_block=CategoryBlock,item_tfms=item_tfms,batch_tfms=batch_tfms,val_idxs=val_idx)\n    return dls","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install -q efficientnet_pytorch","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from efficientnet_pytorch import EfficientNet","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class MyModel(Module):\n    def __init__(self, num_classes):\n\n        self.effnet = EfficientNet.from_pretrained(\"efficientnet-b4\")\n        self.dropout = nn.Dropout(0.1)\n        self.out = nn.Linear(1792, num_classes)\n\n    def forward(self, image):\n        batch_size, _, _, _ = image.shape\n\n        x = self.effnet.extract_features(image)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        outputs = self.out(self.dropout(x))\n        return outputs","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Learner"},{"metadata":{"trusted":true},"cell_type":"code","source":"for fold in range(2):\n    \n    dls = get_data(fold)\n    effnet = MyModel(dls.c)\n    \n    learn = Learner(dls, \n                effnet,\n                loss_func = LabelSmoothingCrossEntropyFlat(), \n                metrics = [accuracy], \n                cbs=[MixUp()],\n                model_dir='/kaggle/working/').to_native_fp16()\n    \n    nm = 'best_model_fold_'+str(fold)\n    cb1 = SaveModelCallback(monitor='accuracy',fname=nm,comp=np.greater) # Callbacks\n    cb2 = ReduceLROnPlateau(monitor='valid_loss', min_delta=0.1, patience=2,factor=0.2)\n    learn.fit_one_cycle(10, 0.0007556, cbs = [cb1,cb2])\n    learn.load(nm);\n    learn = learn.to_fp32()\n    name = 'best_model_fp32_'+'fold_'+str(fold)\n    learn.save(name,with_opt=True);\n    learn,dls=None,None\n    gc.collect()","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}