{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Libraries","metadata":{}},{"cell_type":"code","source":"!pip install --upgrade pip\n!pip install -q efficientnet_pytorch\n# !pip install albumentations","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:30:50.924692Z","iopub.execute_input":"2022-08-02T03:30:50.925026Z","iopub.status.idle":"2022-08-02T03:31:09.584689Z","shell.execute_reply.started":"2022-08-02T03:30:50.924993Z","shell.execute_reply":"2022-08-02T03:31:09.583797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport torch\nfrom sklearn.metrics import plot_confusion_matrix\nfrom torch import nn\nimport cv2\nfrom efficientnet_pytorch import EfficientNet\nfrom matplotlib import image\nfrom torch.utils.data import Dataset\nfrom torchvision import transforms\nfrom torch.utils.data import DataLoader\nfrom tqdm import tqdm\nimport torch.nn.functional as F\nfrom sklearn.utils.class_weight import compute_class_weight\nfrom sklearn.model_selection import train_test_split\nfrom PIL import Image\nimport PIL\nfrom time import time\nimport seaborn as sns\nfrom sklearn.metrics import roc_auc_score\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nimport sklearn\nimport sklearn.metrics as metrics\nimport random\nfrom sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:09.586894Z","iopub.execute_input":"2022-08-02T03:31:09.587245Z","iopub.status.idle":"2022-08-02T03:31:12.749118Z","shell.execute_reply.started":"2022-08-02T03:31:09.587205Z","shell.execute_reply":"2022-08-02T03:31:12.748345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n!ls /kaggle/input/jpeg-melanoma-256x256/\ndevice","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:12.750410Z","iopub.execute_input":"2022-08-02T03:31:12.750768Z","iopub.status.idle":"2022-08-02T03:31:13.760546Z","shell.execute_reply.started":"2022-08-02T03:31:12.750728Z","shell.execute_reply":"2022-08-02T03:31:13.759676Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Path Configuration","metadata":{}},{"cell_type":"code","source":"base_path = \"/kaggle/input/jpeg-melanoma-256x256/\"","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:13.762263Z","iopub.execute_input":"2022-08-02T03:31:13.762662Z","iopub.status.idle":"2022-08-02T03:31:13.767013Z","shell.execute_reply.started":"2022-08-02T03:31:13.762621Z","shell.execute_reply":"2022-08-02T03:31:13.766119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_weights_path  = \"/kaggle/input/model-weights/model_weights.pth\"","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:13.770081Z","iopub.execute_input":"2022-08-02T03:31:13.770733Z","iopub.status.idle":"2022-08-02T03:31:13.776914Z","shell.execute_reply.started":"2022-08-02T03:31:13.770678Z","shell.execute_reply":"2022-08-02T03:31:13.776103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_path = base_path + \"train.csv\"\n# image_data_path = \"/kaggle/input/siim-isic-melanoma-classification/jpeg/train/\"\nlite_data_path = base_path + \"train/\"\n\nall_data = pd.read_csv(data_path).dropna()\nall_data[\"image_path\"] = lite_data_path + all_data[\"image_name\"]+\".jpg\"\n\ntrain, test = train_test_split(all_data, test_size=0.3, stratify=all_data[\"target\"])\ntrain, val = train_test_split(train, test_size=0.20, stratify=train[\"target\"])\n\nsubmit_data_path = base_path + \"test.csv\"\nsubmit_lite_data_path = base_path + \"test/\"\n\nsubm_data = pd.read_csv(submit_data_path)\nsubm_data[\"image_path\"] = submit_lite_data_path + subm_data[\"image_name\"]+\".jpg\"\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:13.780484Z","iopub.execute_input":"2022-08-02T03:31:13.780963Z","iopub.status.idle":"2022-08-02T03:31:14.004098Z","shell.execute_reply.started":"2022-08-02T03:31:13.780933Z","shell.execute_reply":"2022-08-02T03:31:14.003322Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape, val.shape,test.shape,subm_data.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:14.005348Z","iopub.execute_input":"2022-08-02T03:31:14.005709Z","iopub.status.idle":"2022-08-02T03:31:14.015711Z","shell.execute_reply.started":"2022-08-02T03:31:14.005666Z","shell.execute_reply":"2022-08-02T03:31:14.014965Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_weights = torch.Tensor(compute_class_weight(class_weight=\"balanced\",\n                                                  classes=np.unique(train[\"target\"]),y=train[\"target\"])).to(device)\nclass_weights","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:14.017194Z","iopub.execute_input":"2022-08-02T03:31:14.017709Z","iopub.status.idle":"2022-08-02T03:31:17.763448Z","shell.execute_reply.started":"2022-08-02T03:31:14.017673Z","shell.execute_reply":"2022-08-02T03:31:17.762432Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Utils","metadata":{}},{"cell_type":"code","source":"def plot_ROC(y_true, y_score,n_thresholds=10):\n    fpr, tpr, thresholds = metrics.roc_curve(y_true=y_true, y_score=y_score)\n    roc_auc = metrics.auc(fpr, tpr)\n    num_cuts = thresholds.shape[0]//n_thresholds\n    plt.figure(figsize=(8,5))\n    plt.plot(fpr, tpr, label=\"ROC Curve with AUC = %0.2f\" % roc_auc)\n    plt.plot(np.linspace(0,1,10), np.linspace(0,1,10), label=\"Diagonal\")\n    for x, y, txt in zip(fpr[::num_cuts], tpr[::num_cuts], thresholds[::num_cuts]):\n        plt.annotate(np.round(txt,2), (x, y-0.04))\n    rnd_idx = 2\n    plt.legend(loc=\"upper left\")\n    plt.xlabel(\"FPR\")\n    plt.ylabel(\"TPR\")\n    plt.show()\n\ndef predict(threshold,results):\n    arr = []\n    for i in results:\n        if i < threshold:\n            arr.append(0)\n        else:\n            arr.append(1)\n    arr = torch.Tensor(arr).to(device)\n    return arr\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:17.765861Z","iopub.execute_input":"2022-08-02T03:31:17.766439Z","iopub.status.idle":"2022-08-02T03:31:17.778541Z","shell.execute_reply.started":"2022-08-02T03:31:17.766401Z","shell.execute_reply":"2022-08-02T03:31:17.777453Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Loss Function","metadata":{}},{"cell_type":"code","source":"def sigmoid_focal_loss(\n    inputs: torch.Tensor,\n    targets: torch.Tensor,\n    alpha: float = 0.25,\n    gamma: float = 2,\n    reduction: str = \"none\",\n):\n\n    p = torch.sigmoid(inputs)\n    ce_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction=\"none\",pos_weight=torch.Tensor([sum((train['target']==0).values)/sum((train['target']==1).values)]).to(device))\n    \n    p_t = p * targets + (1 - p) * (1 - targets)\n    loss = ce_loss * ((1 - p_t) ** gamma)\n\n    if alpha >= 0:\n        alpha_t = alpha * targets + (1 - alpha) * (1 - targets)\n        loss = alpha_t * loss\n\n    if reduction == \"mean\":\n        loss = loss.mean()\n    elif reduction == \"sum\":\n        loss = loss.sum()\n        \n    return loss\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:31:17.779967Z","iopub.execute_input":"2022-08-02T03:31:17.780436Z","iopub.status.idle":"2022-08-02T03:31:17.795012Z","shell.execute_reply.started":"2022-08-02T03:31:17.780401Z","shell.execute_reply":"2022-08-02T03:31:17.794074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Transformations","metadata":{}},{"cell_type":"code","source":"class Microscope:\n    \"\"\"\n    Cutting out the edges around the center circle of the image\n    Imitating a picture, taken through the microscope\n\n    Args:\n        p (float): probability of applying an augmentation\n    \"\"\"\n\n    def __init__(self, p: float = 0.5):\n        self.p = p\n        \n\n    def __call__(self, img):\n#         print(type(img))\n#         print(img.shape)\n        \"\"\"\n        Args:\n            img (PIL Image): Image to apply transformation to.\n\n        Returns:\n            PIL Image: Image with transformation.\n        \"\"\"\n        if random.random() < self.p:\n            circle = cv2.circle((np.ones(img.shape) * 255).astype(np.uint8), # image placeholder\n                        (img.shape[0]//2, img.shape[1]//2), # center point of circle\n                        random.randint(img.shape[0]//2 - 3, img.shape[0]//2 + 15), # radius\n                        (0, 0, 0), # color\n                        -1)\n\n            mask = circle - 255\n            img = np.multiply(img, mask)\n        \n        return img\n\n    def __repr__(self):\n        return f'{self.__class__.__name__}(p={self.p})'","metadata":{"execution":{"iopub.status.busy":"2022-08-02T03:45:06.534007Z","iopub.execute_input":"2022-08-02T03:45:06.534326Z","iopub.status.idle":"2022-08-02T03:45:06.542731Z","shell.execute_reply.started":"2022-08-02T03:45:06.534296Z","shell.execute_reply":"2022-08-02T03:45:06.541427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def convert_to_microscope(image):\n    mic_transform = Microscope(p=0.3)\n    image = mic_transform(image)\n    return image\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:02:45.378286Z","iopub.execute_input":"2022-08-02T04:02:45.378641Z","iopub.status.idle":"2022-08-02T04:02:45.383626Z","shell.execute_reply.started":"2022-08-02T04:02:45.378587Z","shell.execute_reply":"2022-08-02T04:02:45.382587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_size = 224\ntransforms_train = A.Compose([\n    A.OneOf(\n        [A.Blur(p=0.5,blur_limit=4),\n         A.GaussianBlur(p=0.5,blur_limit=4),\n         A.MedianBlur(p=0.3,blur_limit=4),\n        ],p=0.2\n    ),\n    A.OneOf(\n        [A.Equalize(p=0.4),\n         A.GaussNoise(p=0.3,)\n        ], p=0.4\n    ),\n    A.OneOf(\n        [A.CLAHE(p=0.3),\n         A.ChannelShuffle(p=0.2)\n        ],p=0.2\n    ),\n    A.OneOf(\n        [A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, border_mode=0, p=0.3),\n         A.RandomScale(p=0.2)\n        ], p=0.3\n    ),\n    A.OneOf(\n        [A.Flip(p=0.2),\n         A.RandomBrightness(limit=0.2, p=0.2),\n         A.RandomContrast(limit=0.2, p=0.2)\n        ],p=(0.3)\n    ),\n    A.Resize(img_size,img_size),\n    A.Normalize(),\n    ToTensorV2()\n])\n\ntransforms_val = A.Compose([\n    A.Resize(img_size,img_size),\n    A.Normalize(),\n    ToTensorV2()\n])","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:02:07.510241Z","iopub.execute_input":"2022-08-02T04:02:07.510550Z","iopub.status.idle":"2022-08-02T04:02:07.521332Z","shell.execute_reply.started":"2022-08-02T04:02:07.510522Z","shell.execute_reply":"2022-08-02T04:02:07.520489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Dataset & Data Loader","metadata":{}},{"cell_type":"code","source":"class MelanomaData(Dataset):\n    \n    def __init__(self, df, size=None, submission=False, transform=None):\n        self.df = df\n        self.transform = transform\n        self.submission = submission\n        self.image_ids = df['image_name'].tolist()\n        self.image_path_ids = df['image_path'].tolist()\n        if not self.submission:\n            self.labels = df['target'].tolist()\n        self.image_size = size\n        \n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, index):\n        if not self.submission:\n            label = self.labels[index]\n        image_id = self.image_ids[index]\n        image = cv2.imread(self.image_path_ids[index])\n        \n        if self.transform:\n            image = convert_to_microscope(image)\n            image = self.transform(image=image)\n                            \n        if self.submission:            \n            temp = {\n            \"ID\" : image_id,\n            \"X\" : image\n            }\n        else:\n            temp = {\n                \"ID\" : image_id,\n                \"X\" : image,\n                \"y\" : label\n            }\n        return temp\n        \n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:05:08.052070Z","iopub.execute_input":"2022-08-02T04:05:08.052405Z","iopub.status.idle":"2022-08-02T04:05:08.062473Z","shell.execute_reply.started":"2022-08-02T04:05:08.052368Z","shell.execute_reply":"2022-08-02T04:05:08.061294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dataset = MelanomaData(df=train,transform=transforms_train)\ntest_dataset = MelanomaData(df=test,transform=transforms_val)\nvalidation_dataset = MelanomaData(df=val,transform=transforms_val)\nsubmission_dataset = MelanomaData(df=subm_data, submission=True, transform=transforms_val)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:05:09.796127Z","iopub.execute_input":"2022-08-02T04:05:09.796443Z","iopub.status.idle":"2022-08-02T04:05:09.805610Z","shell.execute_reply.started":"2022-08-02T04:05:09.796414Z","shell.execute_reply":"2022-08-02T04:05:09.804577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size = 64\n\ntrain_dataloader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True, num_workers=4)\ntest_dataloader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False, num_workers=4)\nsubm_loader = DataLoader(dataset=submission_dataset, batch_size=batch_size, shuffle=False, num_workers=4)\nvalidation_dataloader = DataLoader(dataset=validation_dataset, batch_size=batch_size, shuffle=False, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:05:10.895272Z","iopub.execute_input":"2022-08-02T04:05:10.895613Z","iopub.status.idle":"2022-08-02T04:05:10.901506Z","shell.execute_reply.started":"2022-08-02T04:05:10.895569Z","shell.execute_reply":"2022-08-02T04:05:10.900203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Model","metadata":{}},{"cell_type":"code","source":"class MyCNN(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.resnet =  EfficientNet.from_pretrained('efficientnet-b0',num_classes=1)\n\n    def forward(self, x):\n        x = x.float()\n        x = self.resnet(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:05:15.508745Z","iopub.execute_input":"2022-08-02T04:05:15.509086Z","iopub.status.idle":"2022-08-02T04:05:15.515746Z","shell.execute_reply.started":"2022-08-02T04:05:15.509057Z","shell.execute_reply":"2022-08-02T04:05:15.514837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model = MyCNN()\ncnn_model.load_state_dict(torch.load(model_weights_path))\ncnn_model.to(device)\noptimizer = torch.optim.Adam(cnn_model.parameters(), lr = 0.001)\ncriterion = nn.BCEWithLogitsLoss()\ntotal_epochs = 5","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:16:54.949192Z","iopub.execute_input":"2022-08-02T04:16:54.949642Z","iopub.status.idle":"2022-08-02T04:16:55.211581Z","shell.execute_reply.started":"2022-08-02T04:16:54.949590Z","shell.execute_reply":"2022-08-02T04:16:55.210494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Training","metadata":{}},{"cell_type":"code","source":"total_correct = 0\n\nfor i in range(total_epochs):\n    all_preds = torch.empty(0,dtype=torch.float32).to(device)\n    all_actual = torch.empty(0,dtype=torch.float32).to(device)\n    \n    predictions=0    \n    train_loss = 0\n    val_loss = 0\n    start = time()\n    for data in tqdm(train_dataloader):\n        optimizer.zero_grad()\n#         data[\"X\"] = data[\"X\"].permute((0,3,1,2))\n        data[\"X\"]['image'] = data[\"X\"]['image'].to(device)\n        data[\"y\"] = data[\"y\"].to(device)\n        predictions = cnn_model(data[\"X\"]['image'])\n        loss = criterion(predictions.cpu(),data[\"y\"].cpu().float().view((predictions.shape[0],1)))\n#         loss = sigmoid_focal_loss(predictions, data[\"y\"].float().view((predictions.shape[0],1)),reduction=\"mean\")\n        loss.backward()\n        optimizer.step()\n        train_loss += loss.item()\n        \n    with torch.no_grad():\n        for data in tqdm(validation_dataloader):\n            data[\"X\"]['image'] = data[\"X\"]['image'].to(device)\n            data[\"y\"] = data[\"y\"].to(device)\n            predictions = cnn_model(data[\"X\"]['image'])\n            loss = criterion(predictions.cpu(),data[\"y\"].cpu().float().view((predictions.shape[0],1)))\n            val_loss += loss.item()\n            \n            all_preds = torch.cat((all_preds,predictions))\n            all_actual = torch.cat((all_actual,data[\"y\"].float()))\n\n    end = time()\n    \n    print(\"======================================================================================\")\n    print(\"Training Loss : \", train_loss/batch_size, end = \" | \")\n    print(\"Validation Loss : \", val_loss/batch_size, end = \" | \")\n    print(\"Epoch : \" + str(i+1) + \"/\" + str(total_epochs), end= \" | \")\n    print(\"Time Taken : \", round((end-start),2))\n    \n    plot_ROC(all_actual.cpu(),torch.sigmoid(all_preds.cpu()))\n\n","metadata":{"_kg_hide-input":false,"_kg_hide-output":false,"execution":{"iopub.status.busy":"2022-08-02T04:16:56.435186Z","iopub.execute_input":"2022-08-02T04:16:56.435511Z","iopub.status.idle":"2022-08-02T04:26:57.153743Z","shell.execute_reply.started":"2022-08-02T04:16:56.435481Z","shell.execute_reply":"2022-08-02T04:26:57.152715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Testing","metadata":{}},{"cell_type":"code","source":"count = 0\nall_preds = torch.empty(0,dtype=torch.float32).to(device)\nall_actual = torch.empty(0,dtype=torch.int64).to(device)\n\nwith torch.no_grad():\n    for data in tqdm(test_dataloader):\n        data[\"X\"]['image'] = data[\"X\"]['image'].to(device)\n        data[\"y\"] = data[\"y\"].to(device)\n        predictions = cnn_model(data[\"X\"]['image'])\n        predictions = torch.sigmoid(predictions)\n        all_preds = torch.cat((all_preds,predictions))\n        all_actual = torch.cat((all_actual,data[\"y\"]))\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:55:20.370576Z","iopub.execute_input":"2022-08-02T04:55:20.370950Z","iopub.status.idle":"2022-08-02T04:56:02.190454Z","shell.execute_reply.started":"2022-08-02T04:55:20.370917Z","shell.execute_reply":"2022-08-02T04:56:02.188844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Threshold Selection","metadata":{}},{"cell_type":"code","source":"total_correct = 0\ntest_threshold = 0.01\npreds = predict(threshold=test_threshold,results=all_preds)\ntotal_correct = (preds==all_actual).sum().item()","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:02.192731Z","iopub.execute_input":"2022-08-02T04:56:02.193082Z","iopub.status.idle":"2022-08-02T04:56:02.515223Z","shell.execute_reply.started":"2022-08-02T04:56:02.193043Z","shell.execute_reply":"2022-08-02T04:56:02.514417Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Confusion Matrix","metadata":{}},{"cell_type":"code","source":"cf = confusion_matrix(all_actual.cpu(),preds.cpu())\ntn, fp, fn, tp = cf.flatten()\nprint(cf)\n\ndisp = ConfusionMatrixDisplay(confusion_matrix=cf, display_labels=([0,1]))\ndisp.plot()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:02.516676Z","iopub.execute_input":"2022-08-02T04:56:02.517083Z","iopub.status.idle":"2022-08-02T04:56:02.687493Z","shell.execute_reply.started":"2022-08-02T04:56:02.517037Z","shell.execute_reply":"2022-08-02T04:56:02.686614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(round(roc_auc_score(y_true=all_actual.cpu(), y_score=all_preds.cpu()),2))\nprint(classification_report(y_true=all_actual.cpu(), y_pred=preds.cpu()))","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:02.689154Z","iopub.execute_input":"2022-08-02T04:56:02.689628Z","iopub.status.idle":"2022-08-02T04:56:02.718661Z","shell.execute_reply.started":"2022-08-02T04:56:02.689576Z","shell.execute_reply":"2022-08-02T04:56:02.717820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Submission","metadata":{}},{"cell_type":"code","source":"count = 0\nall_preds_subm = torch.empty(0,dtype=torch.float32).to(device)\n\nwith torch.no_grad():\n    for data in tqdm(subm_loader):\n        data[\"X\"]['image'] = data[\"X\"]['image'].to(device)\n        predictions = cnn_model(data[\"X\"]['image'])\n        predictions = torch.sigmoid(predictions)\n        all_preds_subm = torch.cat((all_preds_subm,predictions))\n","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:02.721238Z","iopub.execute_input":"2022-08-02T04:56:02.721589Z","iopub.status.idle":"2022-08-02T04:56:49.903035Z","shell.execute_reply.started":"2022-08-02T04:56:02.721554Z","shell.execute_reply":"2022-08-02T04:56:49.901941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df = pd.DataFrame(columns=[\"image_name\",\"target\"])","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:49.904794Z","iopub.execute_input":"2022-08-02T04:56:49.905168Z","iopub.status.idle":"2022-08-02T04:56:49.915237Z","shell.execute_reply.started":"2022-08-02T04:56:49.905125Z","shell.execute_reply":"2022-08-02T04:56:49.913923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df[\"image_name\"] = subm_data[\"image_name\"].tolist()\n# submission_df[\"label\"] = preds_subm.cpu().type(torch.int64)\nsubmission_df[\"target\"] = all_preds_subm.flatten().cpu()\nsubmission_df.sample(1)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:49.917083Z","iopub.execute_input":"2022-08-02T04:56:49.917444Z","iopub.status.idle":"2022-08-02T04:56:49.939196Z","shell.execute_reply.started":"2022-08-02T04:56:49.917408Z","shell.execute_reply":"2022-08-02T04:56:49.938505Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# del submission_df['label']\nsubmission_df.to_csv(\"submit.csv\",index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T04:56:49.941956Z","iopub.execute_input":"2022-08-02T04:56:49.942199Z","iopub.status.idle":"2022-08-02T04:56:50.191469Z","shell.execute_reply.started":"2022-08-02T04:56:49.942176Z","shell.execute_reply":"2022-08-02T04:56:50.190711Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Saving Model","metadata":{}},{"cell_type":"code","source":"# torch.save(cnn_model,\"model-1.pth\")\n# torch.save(cnn_model.state_dict(),\"model_weights-1.pth\")","metadata":{"execution":{"iopub.status.busy":"2022-07-29T09:23:26.028922Z","iopub.execute_input":"2022-07-29T09:23:26.029292Z","iopub.status.idle":"2022-07-29T09:23:26.033531Z","shell.execute_reply.started":"2022-07-29T09:23:26.029257Z","shell.execute_reply":"2022-07-29T09:23:26.032318Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2022-07-29T08:11:18.423458Z","iopub.execute_input":"2022-07-29T08:11:18.423792Z","iopub.status.idle":"2022-07-29T08:11:18.467575Z","shell.execute_reply.started":"2022-07-29T08:11:18.423763Z","shell.execute_reply":"2022-07-29T08:11:18.466704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}