{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nimport sys\n\nsys.path = [\n    '/kaggle/input/efficientnet-pytorch/EfficientNet-PyTorch/EfficientNet-PyTorch-master',\n] + sys.path\n\nimport torch\nos.listdir(\"/kaggle/input/efficientnet-pytorch/EfficientNet-PyTorch/EfficientNet-PyTorch-master\")\n\nfrom efficientnet_pytorch import EfficientNet","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from efficientnet_pytorch import EfficientNet\n# Imports here\nimport matplotlib.pyplot as plt\nimport torch\nfrom torch import nn\nfrom torch import optim\nimport torch.nn.functional as F\nfrom torchvision import datasets, transforms, models\nfrom torch.utils.data import Dataset, DataLoader\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport csv\nimport pandas as pd\nimport os\nimport random\nimport math\nimport skimage.io\n#from csv_loader import load_csv\n\n# Tiff visualisation imports and downloads\nimport numpy as np\nimport tifffile as tiff\n\n# For re-importing python modules\nimport importlib","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# #use GPU if available\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\ntorch.set_default_tensor_type(torch.cuda.FloatTensor)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class load_csv(Dataset):\n    def __init__(self, csv_file, root_dir, transform=None):\n        self.annotations = pd.read_csv(csv_file)# todo remove sample for debug\n        self.root_dir = root_dir\n        self.transform = transform\n    \n    def __len__(self):\n        return len(self.annotations)\n        \n    \n    def __getitem__(self, index):\n        #img_path = os.path.join(self.root_dir, self.annotations.iloc[index, 0])\n        image_id = self.annotations.iloc[index, 0]\n        img_path = os.path.join(self.root_dir, str(image_id) +\".tiff\")\n        img = skimage.io.MultiImage(img_path)[2]\n        \n        image = torch.from_numpy(img).permute(2,0,1).float()\n        \n        #Image.MAX_IMAGE_PIXELS = None\n                \n        #image.transform = transforms.RandomResizedCrop(224)\n        \n        #y_label = torch.tensor(int(self.annotations.iloc[index,:]['isup_grade']))\n        #isup_grade = int(self.annotations.iloc[index,:]['isup_grade'])\n        \n        #label = np.zeros(6).astype(np.float32)\n        #y_label = label[isup_grade] = 1.\n        #y_label = torch.tensor(y_label)\n        \n        self.transform= transforms.Compose([transforms.ToPILImage(),\n                                            transforms.Resize((int(1840/2),int(1728/2))), \n                                            transforms.ToTensor()])\n                                            #transforms.Normalize([0.485, 0.456, 0.406],\n                                                             #      [0.229, 0.224, 0.225])])\n        if self.transform:\n            image = self.transform(image)\n        \n        return (image, np.array(0))#1840, 1728","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#criterion = nn.NLLLoss()\n\n#model = EfficientNet.from_pretrained('efficientnet-b4', num_classes=6)\n\nmodel = EfficientNet.from_name('efficientnet-b4')\nmodel.load_state_dict(torch.load(\"/kaggle/input/efficientnet-pytorch/efficientnet-b4-e116e8b3.pth\"))\n\n\nmodel._fc = nn.Sequential(nn.Linear(model._fc.in_features, 6),\n                          nn.LogSoftmax(dim=1))\n\n#optimizer = optim.Adam(model.parameters(), lr=0.001)\n\ncheckpoint = torch.load(\"/kaggle/input/cnnmodelv1/model.pth\")\nmodel.load_state_dict(checkpoint['model_state_dict'])\n#optimizer.load_state_dict(checkpoint['optimizer_state_dict'])\n#epoch = checkpoint['epoch']\n#loss = checkpoint['loss']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# def validate_data_function(model, test_loader, criterion):\n#     test_loss = 0\n#     accuracy = 0\n    \n#     for ii, (inputs, labels, image_id) in enumerate(test_loader):\n        \n#         inputs, labels = inputs.to(device), labels.to(device)\n        \n#         output = model.forward(inputs)\n#         test_loss += criterion(output,labels.long())#.item()\n        \n#         #ps = torch.exp(output)\n#         #equality = (labels.argmax(dim=1) == output.argmax(dim=1))\n#         equality = (labels == output.argmax(dim=1))\n#         accuracy += equality.type(torch.FloatTensor).mean()\n#         #pred = output.cpu().data.numpy().argmax()\n#         #qwk = cohen_kappa_score(pred, labels, weights='quadratic')\n    \n#     return test_loss, accuracy, image_id","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model.eval()\n    \n# with torch.no_grad():\n#     test_loss, accuracy, image_id = validate_data_function(model, train_loader, criterion)\n                \n# print(\"Test Accuracy: {}%\".format(accuracy*100/len(train_loader)))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#sampleimg=next(iter(load_csv(csv_file=csv_file_dir, root_dir=submission_test_path)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sampleimg[0].shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Creating submission file\n\n# For testing\n#######Comment before submission\n# file_info = pd.read_csv('../input/prostate-cancer-grade-assessment/train.csv').copy()\n# sample_size = 5\n# submit_list = file_info.sample(sample_size)\n# submit_list.to_csv(\"sample.csv\", sep=\",\", index=False)\n# submission_test_path = \"../input/prostate-cancer-grade-assessment/train_images/\"\n# #csv_file_dir = './sample.csv'\n# csv_file_dir = '/kaggle/input/prostate-cancer-grade-assessment/train.csv'\n###########\n\n# For submission\nsubmission_test_path = \"/kaggle/input/prostate-cancer-grade-assessment/test_images/\"\ncsv_file_dir = '/kaggle/input/prostate-cancer-grade-assessment/test.csv'\n\npred_y_excel = []\nsubmission=None\nif os.path.exists(submission_test_path):\n    #print(\"dir found\")\n    test_df = pd.read_csv(csv_file_dir)\n    test_data = load_csv(csv_file=csv_file_dir, root_dir=submission_test_path)\n    test_loader = torch.utils.data.DataLoader(test_data, batch_size=1, shuffle=False)\n    #model.eval()\n    dummy=0\n    for ii2, (inputs2, labels2) in enumerate(test_loader):\n        dummy=1+1\n        inputs2, labels2 = inputs2.to(device), labels2.to(device)\n    \n        output2 = model.forward(inputs2)\n        pred_y2 = output2.argmax(dim=1)\n\n        pred_y_excel.append(int(pred_y2))\n    #print(\"writing csv\")\n    #pred_y_excel = [3 for i in range(test_df.shape[0])]\n    submission = pd.DataFrame({'image_id':test_df.image_id, 'isup_grade':pred_y_excel})\n    submission.to_csv(\"submission.csv\", sep=\",\", index=False)\nelse:\n    #print(\"dir not found, building dummy\")\n    test_df = pd.read_csv(\"/kaggle/input/prostate-cancer-grade-assessment/sample_submission.csv\")\n#     test_df['isup_grade'] = 0\n#     fake_submission=test_df[['image_id','isup_grade']]\n    test_df.to_csv('submission.csv', index=False)\n    #print('submission saved')\n    #print(fake_submission)","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}