{"cells":[{"metadata":{},"cell_type":"markdown","source":"This is a tutorial on how to make successfull submission. \n\nNote:\n\n1. I trained the model offline and loaded it as dataset.\n2. Change the values of 'x' and 'y' according to your model."},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport torch\nimport torchvision\nfrom torchvision import transforms, datasets, models\nimport os\nfrom torch.utils.data import Dataset, DataLoader\nimport pandas as pd\nfrom PIL import Image\nimport torch.nn as nn\nimport numpy as np\nfrom tqdm import tqdm_notebook\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# define batches and input size\nnum_classes = 5\nbatch_size = 16\ninput_size = (x, y)\n\ntest_dir = '../input/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# data transforms\ndata_transforms = transforms.Compose([\n        transforms.Resize(input_size),\n        transforms.ToTensor(),\n        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# class return images in 'test.csv'\nclass ImageDataset(Dataset):\n    \n    def __init__(self, csv_file, root_dir, transform = None):\n        self.class_labels = pd.read_csv(csv_file)\n        self.root_dir = root_dir\n        self.transform = transform\n        \n    def __len__(self):\n        return len(self.class_labels)\n    \n    def __getitem__(self, idx):\n        image_name = os.path.join(self.root_dir, self.class_labels.iloc[idx, 0])\n        image = Image.open(image_name + '.png')\n\n        sample = {'image': image}\n        \n        if self.transform:\n            sample['image'] = self.transform(sample['image'])\n            \n        return sample","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# create test dataset and loader\ntest_dataset = ImageDataset(test_dir + 'test.csv', test_dir +'/test_images/', data_transforms)\ntest_loader = DataLoader(test_dataset, batch_size, shuffle=False,  num_workers=6)\ndevice = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(test_dataset)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# load model here\nmodel_ft = 'load_model_here'\nnum_ftrs = model_ft.fc.in_features\nmodel_ft.fc = nn.Linear(num_ftrs, num_classes)\nmodel_ft = model_ft.to(device)\n\n# load weights\nstate = torch.load('*.pth')\nmodel_ft.load_state_dict(state['state_dict'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# predictions\npred_list = []\nmodel_ft.eval()\nfor sample in test_loader:\n    image = sample['image'].to(device)\n    outputs = model_ft(image)\n    _, predicted = torch.max(outputs, 1) \n    pred_list += [p.item() for p in predicted]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# make submission to csv\nsubmission = pd.read_csv(test_dir+'test.csv')\nsubmission['diagnosis'] = pred_list\nsubmission.to_csv(test_dir + 'submission.csv', index=False)","execution_count":null,"outputs":[]}],"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}