{"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":"","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.016459,"end_time":"2022-08-17T08:25:34.234385","exception":false,"start_time":"2022-08-17T08:25:34.217926","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# Final Project 1: Melanoma Classification","metadata":{"papermill":{"duration":0.013855,"end_time":"2022-08-17T08:25:34.263009","exception":false,"start_time":"2022-08-17T08:25:34.249154","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"","metadata":{"papermill":{"duration":0.014422,"end_time":"2022-08-17T08:25:34.291634","exception":false,"start_time":"2022-08-17T08:25:34.277212","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"\nfor this project we use <a href='https://www.kaggle.com/competitions/siim-isic-melanoma-classification'>SIIM-ISIC Melanoma Classification</a> dataset.","metadata":{"papermill":{"duration":0.013839,"end_time":"2022-08-17T08:25:34.31935","exception":false,"start_time":"2022-08-17T08:25:34.305511","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"## Perform standard imports","metadata":{"papermill":{"duration":0.014321,"end_time":"2022-08-17T08:25:34.347673","exception":false,"start_time":"2022-08-17T08:25:34.333352","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# System\nimport cv2\nimport os, os.path\nfrom PIL import Image             \nimport gc\nimport time\nimport datetime\n\n# Basics\nimport pandas as pd\nimport numpy as np\nimport random\nimport seaborn as sns\nimport matplotlib\nimport matplotlib.pyplot as plt\n%matplotlib inline\n\nfrom tqdm.notebook import tqdm     \n\n# SKlearn\nfrom sklearn.model_selection import StratifiedKFold, GroupKFold\nfrom sklearn.metrics import accuracy_score, roc_auc_score, confusion_matrix\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn import preprocessing\n\nfrom skimage import io\n\n# PyTorch\nimport torch\nimport torchvision\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader, Subset\n\nfrom torchvision.models import resnet34\nfrom torchvision import transforms\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"papermill":{"duration":3.548709,"end_time":"2022-08-17T08:25:37.910384","exception":false,"start_time":"2022-08-17T08:25:34.361675","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.095725Z","iopub.execute_input":"2022-10-16T05:03:21.096234Z","iopub.status.idle":"2022-10-16T05:03:21.11131Z","shell.execute_reply.started":"2022-10-16T05:03:21.096191Z","shell.execute_reply":"2022-10-16T05:03:21.109185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"PyTorch Version: \",torch.__version__)\nprint(\"Torchvision Version: \",torchvision.__version__)","metadata":{"papermill":{"duration":0.023371,"end_time":"2022-08-17T08:25:37.948381","exception":false,"start_time":"2022-08-17T08:25:37.92501","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.11382Z","iopub.execute_input":"2022-10-16T05:03:21.114204Z","iopub.status.idle":"2022-10-16T05:03:21.148027Z","shell.execute_reply.started":"2022-10-16T05:03:21.11417Z","shell.execute_reply":"2022-10-16T05:03:21.146878Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# For reproducibility\nseed = 1234\n\nnp.random.seed(seed)\nrandom.seed(seed)\ntorch.manual_seed(seed)\ntorch.cuda.manual_seed(seed)","metadata":{"papermill":{"duration":0.026258,"end_time":"2022-08-17T08:25:37.988662","exception":false,"start_time":"2022-08-17T08:25:37.962404","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.149366Z","iopub.execute_input":"2022-10-16T05:03:21.15014Z","iopub.status.idle":"2022-10-16T05:03:21.16041Z","shell.execute_reply.started":"2022-10-16T05:03:21.150107Z","shell.execute_reply":"2022-10-16T05:03:21.159521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprint('Device available now:', device)","metadata":{"papermill":{"duration":0.086495,"end_time":"2022-08-17T08:25:38.088979","exception":false,"start_time":"2022-08-17T08:25:38.002484","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.161875Z","iopub.execute_input":"2022-10-16T05:03:21.162858Z","iopub.status.idle":"2022-10-16T05:03:21.171456Z","shell.execute_reply.started":"2022-10-16T05:03:21.162808Z","shell.execute_reply":"2022-10-16T05:03:21.1705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/siim-isic-melanoma-classification/train.csv')\n# train_df = train_df.head(1000)\n","metadata":{"papermill":{"duration":0.109839,"end_time":"2022-08-17T08:25:38.213182","exception":false,"start_time":"2022-08-17T08:25:38.103343","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.174114Z","iopub.execute_input":"2022-10-16T05:03:21.174976Z","iopub.status.idle":"2022-10-16T05:03:21.225951Z","shell.execute_reply.started":"2022-10-16T05:03:21.174801Z","shell.execute_reply":"2022-10-16T05:03:21.225102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.target.value_counts()","metadata":{"papermill":{"duration":0.030295,"end_time":"2022-08-17T08:25:38.259141","exception":false,"start_time":"2022-08-17T08:25:38.228846","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.22911Z","iopub.execute_input":"2022-10-16T05:03:21.229376Z","iopub.status.idle":"2022-10-16T05:03:21.239922Z","shell.execute_reply.started":"2022-10-16T05:03:21.229352Z","shell.execute_reply":"2022-10-16T05:03:21.23895Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_df)","metadata":{"papermill":{"duration":0.024391,"end_time":"2022-08-17T08:25:38.297493","exception":false,"start_time":"2022-08-17T08:25:38.273102","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.241049Z","iopub.execute_input":"2022-10-16T05:03:21.241395Z","iopub.status.idle":"2022-10-16T05:03:21.248847Z","shell.execute_reply.started":"2022-10-16T05:03:21.24136Z","shell.execute_reply":"2022-10-16T05:03:21.247898Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## create DataSet","metadata":{"papermill":{"duration":0.015051,"end_time":"2022-08-17T08:25:38.326623","exception":false,"start_time":"2022-08-17T08:25:38.311572","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class MelanomaDataset(Dataset):\n    \n    def __init__(self, dataframe,is_train=True, is_valid=False, is_test=False):\n        self.dataframe, self.is_train, self.is_valid = dataframe, is_train, is_valid\n        \n        # Data Augmentation\n        if is_train or is_test:\n            self.transform = transforms.Compose([transforms.ToPILImage(),\n                                                 transforms.RandomResizedCrop((224,224), scale=(0.4, 1.0)),\n                                                 transforms.RandomHorizontalFlip(p = 0.3),\n                                                 transforms.RandomVerticalFlip(p = 0.3),\n                                                 transforms.ToTensor(),\n                                                 transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n        else:\n            self.transform = transforms.Compose([transforms.ToPILImage(),\n                                                 transforms.Resize((224,224)),\n                                                 transforms.ToTensor(),\n                                                 transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n            \n    def __len__(self):\n        return len(self.dataframe)\n    \n    def __getitem__(self, index):\n        # Select path and read image\n        img_name = self.dataframe['image_name'][index]\n        image_path = f'../input/siim-isic-melanoma-classification/jpeg/train/{img_name}.jpg'\n        image = io.imread(image_path)\n        \n        # Apply transforms\n        image = self.transform(image)\n\n        \n        # If train/valid: image + class | If test: only image\n        if self.is_train or self.is_valid:\n            return (image, self.dataframe['target'][index])\n        else:\n            return (image)","metadata":{"papermill":{"duration":0.02743,"end_time":"2022-08-17T08:25:38.368669","exception":false,"start_time":"2022-08-17T08:25:38.341239","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.250194Z","iopub.execute_input":"2022-10-16T05:03:21.251267Z","iopub.status.idle":"2022-10-16T05:03:21.262177Z","shell.execute_reply.started":"2022-10-16T05:03:21.251232Z","shell.execute_reply":"2022-10-16T05:03:21.261282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## create Model","metadata":{"papermill":{"duration":0.014473,"end_time":"2022-08-17T08:25:38.397684","exception":false,"start_time":"2022-08-17T08:25:38.383211","status":"completed"},"tags":[]}},{"cell_type":"code","source":"print(resnet34(pretrained=True))","metadata":{"papermill":{"duration":3.21645,"end_time":"2022-08-17T08:25:41.629051","exception":false,"start_time":"2022-08-17T08:25:38.412601","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:21.349678Z","iopub.execute_input":"2022-10-16T05:03:21.350069Z","iopub.status.idle":"2022-10-16T05:03:25.822405Z","shell.execute_reply.started":"2022-10-16T05:03:21.350026Z","shell.execute_reply":"2022-10-16T05:03:25.821498Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class ResNet34Network(nn.Module):\n    def __init__(self):\n        super().__init__()\n        \n        # Define Feature part (IMAGE)\n        self.features = resnet34(pretrained=True) # 1000 neurons out\n        \n        for param in self.features.parameters():\n            param.requires_grad = False\n  \n        # Define Classification part\n        self.classification = nn.Linear(1000, 1)\n        \n        \n    def forward(self, image):\n        # Image CNN\n        image = self.features(image)\n        \n        # Classifier\n        out = self.classification(image)\n        \n        return out","metadata":{"papermill":{"duration":0.02525,"end_time":"2022-08-17T08:25:41.669414","exception":false,"start_time":"2022-08-17T08:25:41.644164","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:25.827178Z","iopub.execute_input":"2022-10-16T05:03:25.829487Z","iopub.status.idle":"2022-10-16T05:03:25.838801Z","shell.execute_reply.started":"2022-10-16T05:03:25.829445Z","shell.execute_reply":"2022-10-16T05:03:25.837369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = ResNet34Network()\nmodel = model.to(device)","metadata":{"papermill":{"duration":3.483744,"end_time":"2022-08-17T08:25:45.167827","exception":false,"start_time":"2022-08-17T08:25:41.684083","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:25.843293Z","iopub.execute_input":"2022-10-16T05:03:25.845962Z","iopub.status.idle":"2022-10-16T05:03:29.499764Z","shell.execute_reply.started":"2022-10-16T05:03:25.845925Z","shell.execute_reply":"2022-10-16T05:03:29.498768Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(model)","metadata":{"papermill":{"duration":0.025416,"end_time":"2022-08-17T08:25:45.212148","exception":false,"start_time":"2022-08-17T08:25:45.186732","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:29.501033Z","iopub.execute_input":"2022-10-16T05:03:29.501393Z","iopub.status.idle":"2022-10-16T05:03:29.50874Z","shell.execute_reply.started":"2022-10-16T05:03:29.501359Z","shell.execute_reply":"2022-10-16T05:03:29.507756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data object and Loader\ndataset = MelanomaDataset(train_df, is_train=True, is_valid=False, is_test=False)\nloader = DataLoader(dataset,batch_size=3, shuffle=True)","metadata":{"papermill":{"duration":0.024381,"end_time":"2022-08-17T08:25:45.25119","exception":false,"start_time":"2022-08-17T08:25:45.226809","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:29.511846Z","iopub.execute_input":"2022-10-16T05:03:29.512535Z","iopub.status.idle":"2022-10-16T05:03:29.520774Z","shell.execute_reply.started":"2022-10-16T05:03:29.512499Z","shell.execute_reply":"2022-10-16T05:03:29.519885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get a sample\nfor image, labels in loader:\n    image_example = image\n    labels_example = torch.tensor(labels, dtype=torch.float32)\n    break\n    \nprint('Data shape:', image_example.shape)\nprint('Label:', labels_example)","metadata":{"papermill":{"duration":0.910438,"end_time":"2022-08-17T08:25:46.177564","exception":false,"start_time":"2022-08-17T08:25:45.267126","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:29.522216Z","iopub.execute_input":"2022-10-16T05:03:29.522558Z","iopub.status.idle":"2022-10-16T05:03:30.298989Z","shell.execute_reply.started":"2022-10-16T05:03:29.522522Z","shell.execute_reply":"2022-10-16T05:03:30.297901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"learning_rate = 0.0005\nepochs = 5\ndevice = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\nprint(device)","metadata":{"papermill":{"duration":0.063833,"end_time":"2022-08-17T08:25:46.275627","exception":false,"start_time":"2022-08-17T08:25:46.211794","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:30.300657Z","iopub.execute_input":"2022-10-16T05:03:30.301623Z","iopub.status.idle":"2022-10-16T05:03:30.307779Z","shell.execute_reply.started":"2022-10-16T05:03:30.301584Z","shell.execute_reply":"2022-10-16T05:03:30.306565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Initiate the model\nmodel = model\nmodel = model.to(device)\noptimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr = learning_rate)\ncriterion = nn.BCEWithLogitsLoss()  ","metadata":{"papermill":{"duration":0.050442,"end_time":"2022-08-17T08:25:46.356227","exception":false,"start_time":"2022-08-17T08:25:46.305785","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:30.30927Z","iopub.execute_input":"2022-10-16T05:03:30.309728Z","iopub.status.idle":"2022-10-16T05:03:30.322423Z","shell.execute_reply.started":"2022-10-16T05:03:30.309693Z","shell.execute_reply":"2022-10-16T05:03:30.321482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_size = int(len(train_df) * 0.6)\nval_size = int(len(train_df) * 0.2)\ntest_size = int(len(train_df) * 0.2)\n\nprint(f'train size : {train_size}, val size : {val_size}, test size : {test_size}')","metadata":{"papermill":{"duration":0.042288,"end_time":"2022-08-17T08:25:46.424502","exception":false,"start_time":"2022-08-17T08:25:46.382214","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:30.323459Z","iopub.execute_input":"2022-10-16T05:03:30.324607Z","iopub.status.idle":"2022-10-16T05:03:30.333264Z","shell.execute_reply.started":"2022-10-16T05:03:30.324572Z","shell.execute_reply":"2022-10-16T05:03:30.332367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# --- Read in Data ---\ntrain_data = train_df.iloc[:train_size].reset_index(drop=True)\nvalid_data = train_df.iloc[train_size:train_size + val_size].reset_index(drop=True)\ntest_data = train_df.iloc[train_size + val_size:].reset_index(drop=True)\n# Create Data instances\ntrain = MelanomaDataset(train_data, is_train=True, is_valid=False, is_test=False)\nvalid = MelanomaDataset(valid_data, is_train=False, is_valid=True, is_test=False)\ntest = MelanomaDataset(valid_data, is_train=False, is_valid=True, is_test=False)\n\n# Dataloaders\ntrain_loader = DataLoader(train, batch_size=16, shuffle=True)\nvalid_loader = DataLoader(valid, batch_size=8, shuffle=True)\ntest_loader = DataLoader(valid, batch_size=1, shuffle=True)","metadata":{"papermill":{"duration":0.048577,"end_time":"2022-08-17T08:25:46.504806","exception":false,"start_time":"2022-08-17T08:25:46.456229","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:30.334411Z","iopub.execute_input":"2022-10-16T05:03:30.334655Z","iopub.status.idle":"2022-10-16T05:03:30.347293Z","shell.execute_reply.started":"2022-10-16T05:03:30.334633Z","shell.execute_reply":"2022-10-16T05:03:30.346437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# === EPOCHS ===\nfor epoch in range(epochs):\n    print(f'epoch : {epoch} start!')\n    start_time = time.time()\n    correct = 0\n    train_losses = 0\n\n    # === TRAIN ===\n    # Sets the module in training mode.\n    model.train()\n\n    for images, labels in train_loader:\n        # Save them to device\n        images = torch.tensor(images, device=device, dtype=torch.float32)\n        labels = torch.tensor(labels, device=device, dtype=torch.float32)\n\n        # Clear gradients first; very important, usually done BEFORE prediction\n        optimizer.zero_grad()\n\n        # Log Probabilities & Backpropagation\n        out = model(images)\n        loss = criterion(out, labels.unsqueeze(1))\n        loss.backward()\n        optimizer.step()\n\n        train_losses += loss.item()\n        # From log probabilities to actual probabilities\n        train_preds = torch.round(torch.sigmoid(out)) # 0 and 1\n        # Number of correct predictions\n        correct += (train_preds.cpu() == labels.cpu().unsqueeze(1)).sum().item()\n\n    # Compute Train Accuracy\n    train_acc = correct*100 / train_size\n    print(f'Epoch :{epoch + 1} - train accuracy: {train_acc}')\n    \n    # === EVAL ===\n    model.eval()\n\n    # Create matrix to store evaluation predictions (for accuracy)\n    valid_preds = torch.zeros(size = (len(valid_data), 1), device=device, dtype=torch.float32)\n\n\n    # Disables gradients (we need to be sure no optimization happens)\n    with torch.no_grad():\n        for k, (images, labels) in enumerate(valid_loader):\n            images = torch.tensor(images, device=device, dtype=torch.float32)\n            labels = torch.tensor(labels, device=device, dtype=torch.float32)\n\n            out = model(images)\n            pred = torch.sigmoid(out)\n            valid_preds[k*images.shape[0] : k*images.shape[0] + images.shape[0]] = pred\n\n        # Compute accuracy\n        valid_acc = accuracy_score(valid_data['target'].values, \n                                           torch.round(valid_preds.cpu()))*100\n        # Compute ROC\n        valid_roc = roc_auc_score(valid_data['target'].values, \n                                          valid_preds.cpu())\n\n        # Compute time on Train + Eval\n        duration = str(datetime.timedelta(seconds=time.time() - start_time))[:7]\n\n\n        # PRINT INFO\n        print('{} | Epoch: {}/{} | Loss: {:.4} | Train Acc: {:.3} | Valid Acc: {:.3} | ROC: {:.3}'.\\\n                    format(duration, epoch+1, epochs, train_losses, train_acc, valid_acc, valid_roc))\n        \n        \ntorch.save(model.state_dict(), './model.pt')\n\nfrom IPython.display import FileLink\nFileLink(r'model.pt')","metadata":{"papermill":{"duration":10898.391986,"end_time":"2022-08-17T11:27:24.91993","exception":false,"start_time":"2022-08-17T08:25:46.527944","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-10-16T05:03:30.348894Z","iopub.execute_input":"2022-10-16T05:03:30.349282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.save(model.state_dict(), './model.pt')","metadata":{"papermill":{"duration":0.189273,"end_time":"2022-08-17T11:27:25.124419","exception":false,"start_time":"2022-08-17T11:27:24.935146","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data object and Loader\ndataset = MelanomaDataset(train_df, is_train=True, is_valid=False, is_test=False)\nloader = DataLoader(dataset,batch_size=1, shuffle=True)","metadata":{"papermill":{"duration":0.02485,"end_time":"2022-08-17T11:27:25.164986","exception":false,"start_time":"2022-08-17T11:27:25.140136","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get a sample\nfor image, label in test_loader:\n    image = torch.tensor(image, device=device, dtype=torch.float32)\n    label = torch.tensor(label, device=device, dtype=torch.float32)\n    out = model(image)\n    loss = criterion(out, label.unsqueeze(1))\n    pred = torch.sigmoid(out)\n    print('loss: ', loss)\n    print('Label:', label)\n    print('Pred:', pred)\n    break","metadata":{"papermill":{"duration":0.748007,"end_time":"2022-08-17T11:27:25.92838","exception":false,"start_time":"2022-08-17T11:27:25.180373","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import FileLink\nFileLink(r'model.pt')","metadata":{"papermill":{"duration":0.019414,"end_time":"2022-08-17T11:27:25.966152","exception":false,"start_time":"2022-08-17T11:27:25.946738","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_lo = ResNet34Network()\nmodel_lo = model_lo.to(device)\nmodel_lo.load_state_dict(torch.load('model.pt'))\nmodel_lo.eval()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train_df.loc[train_df['target']==1].head().values)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data object and Loader\ndf = pd.DataFrame({'image_name':['ISIC_2637011', 'ISIC_0149568'], 'patient_id':['IP_7279968', 'IP_0962375'], 'sex':['male', 'female'], 'age_approx':[45.0, 55.0],\n                  'anatom_site_general_challenge':['head/neck', 'upper extremity'], 'diagnosis':['unknown', 'melanoma'],\n                   'benign_malignant':['benign', 'malignant'], 'target':[0,1]})\n\n\ndataset = MelanomaDataset(df, is_train=True, is_valid=False, is_test=False)\nloader = DataLoader(dataset,batch_size=1, shuffle=False)\n# Get a sample\nfor image, label in loader:\n    image = torch.tensor(image, device=device, dtype=torch.float32)\n    label = torch.tensor(label, device=device, dtype=torch.float32)\n    out = model(image)\n    loss = criterion(out, label.unsqueeze(1))\n    pred = torch.sigmoid(out)\n    \n#     print('loss: ', loss)\n#     print('Label:', label)\n    print('Pred:', pred)\n    print('out:', torch.round(pred))\n    print('__________________________________________________________________')","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}