{"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":"References:\nhttps://www.kaggle.com/ammarnassanalhajali/brain-tumor-3d-training","metadata":{}},{"cell_type":"markdown","source":"# **Import Libraries**","metadata":{}},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torchvision.transforms as transforms\nimport torch.nn.functional as F\nimport sklearn\nimport torchvision\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nimport numpy as np\nimport pandas as pd\nimport os\nimport matplotlib.pyplot as plt\nimport PIL\nfrom PIL import Image\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nimport seaborn as sns\nimport glob\nfrom pathlib import Path\nimport cv2\ntorch.manual_seed(1)\nnp.random.seed(1)\nimport re\nimport pydicom\nimport math\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:00:54.755029Z","iopub.execute_input":"2021-10-14T18:00:54.755263Z","iopub.status.idle":"2021-10-14T18:01:01.210486Z","shell.execute_reply.started":"2021-10-14T18:00:54.755199Z","shell.execute_reply":"2021-10-14T18:01:01.209751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGE_SIZE = 256\nNUM_IMAGES = 64\nBATCH_SIZE= 4","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.211949Z","iopub.execute_input":"2021-10-14T18:01:01.212202Z","iopub.status.idle":"2021-10-14T18:01:01.217574Z","shell.execute_reply.started":"2021-10-14T18:01:01.21217Z","shell.execute_reply":"2021-10-14T18:01:01.216811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Data Loading and Visualizations**","metadata":{}},{"cell_type":"code","source":"def loading_image(path, img_size=IMAGE_SIZE):\n    dicom = pydicom.read_file(path)\n    data = dicom.pixel_array\n    data = apply_voi_lut(dicom.pixel_array, dicom)\n    data = cv2.resize(data, (img_size, img_size))\n    return data","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.218651Z","iopub.execute_input":"2021-10-14T18:01:01.219367Z","iopub.status.idle":"2021-10-14T18:01:01.22652Z","shell.execute_reply.started":"2021-10-14T18:01:01.219314Z","shell.execute_reply":"2021-10-14T18:01:01.225841Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_3d_image(idx, mri_type, num_imgs=NUM_IMAGES, split='train'):\n    files = sorted(glob.glob(f\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/{split}/{idx}/{mri_type}/*.dcm\"), \n                   key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n    middle = int(len(files) / 2)\n    half_num_imgs = int(num_imgs / 2)\n    start = max(0, middle - half_num_imgs)\n    end = min(len(files) + 1, middle + half_num_imgs)\n#     for i, f in enumerate(files[start:end]):\n#         if i == 0:\n#             img3d = loading_image(f)\n#         else:\n#             img3d = np.stack([loading_image(f)])\n    arrays = [loading_image(f) for f in files[start:end]]\n#     print(arrays)\n    img3d = np.stack(arrays, axis=2)\n    \n    if img3d.shape[-1] < num_imgs:\n        n_zero = np.zeros((IMAGE_SIZE, IMAGE_SIZE, num_imgs - img3d.shape[-1]))\n        img3d = np.concatenate((img3d,  n_zero), axis=-1)\n        \n    if np.min(img3d) < np.max(img3d):\n        img3d = img3d - np.min(img3d)\n        img3d = img3d / np.max(img3d)\n\n    return img3d\n","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.228951Z","iopub.execute_input":"2021-10-14T18:01:01.229263Z","iopub.status.idle":"2021-10-14T18:01:01.238969Z","shell.execute_reply.started":"2021-10-14T18:01:01.229231Z","shell.execute_reply":"2021-10-14T18:01:01.238148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Dicom Imgs took too much memory so switched to png dataset**","metadata":{}},{"cell_type":"code","source":"def load_png(path, img_size=IMAGE_SIZE):\n    img = Image.open(path)\n    img = np.array(img)\n    img = cv2.resize(img, (img_size, img_size))\n    \n    return img","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.240014Z","iopub.execute_input":"2021-10-14T18:01:01.240443Z","iopub.status.idle":"2021-10-14T18:01:01.2473Z","shell.execute_reply.started":"2021-10-14T18:01:01.240408Z","shell.execute_reply":"2021-10-14T18:01:01.246414Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_3d_png(idx, mri_type, num_imgs=NUM_IMAGES, split='train'):\n    files = sorted(glob.glob(f\"../input/rsna-miccai-png/{split}/{idx}/{mri_type}/*.png\"), \n                   key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n    middle = int(len(files) / 2)\n    half_num_imgs = int(num_imgs / 2)\n    start = max(0, middle - half_num_imgs)\n    end = min(len(files) + 1, middle + half_num_imgs)\n    arrays = [load_png(f) for f in files[start:end]]\n#     raise ValueError(idx)\n#     print(idx)\n#     print(len(arrays))\n    img3d = np.stack(arrays, axis=2)\n    \n    if img3d.shape[-1] < num_imgs:\n        n_zero = np.zeros((IMAGE_SIZE, IMAGE_SIZE, num_imgs - img3d.shape[-1]))\n        img3d = np.concatenate((img3d,  n_zero), axis=-1)\n\n    return img3d\n","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.248392Z","iopub.execute_input":"2021-10-14T18:01:01.248815Z","iopub.status.idle":"2021-10-14T18:01:01.263236Z","shell.execute_reply.started":"2021-10-14T18:01:01.248782Z","shell.execute_reply":"2021-10-14T18:01:01.262597Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = pd.read_csv('../input/rsna-miccai-brain-tumor-radiogenomic-classification/train_labels.csv')","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.265998Z","iopub.execute_input":"2021-10-14T18:01:01.266203Z","iopub.status.idle":"2021-10-14T18:01:01.282411Z","shell.execute_reply.started":"2021-10-14T18:01:01.266183Z","shell.execute_reply":"2021-10-14T18:01:01.281775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.283333Z","iopub.execute_input":"2021-10-14T18:01:01.283518Z","iopub.status.idle":"2021-10-14T18:01:01.304916Z","shell.execute_reply.started":"2021-10-14T18:01:01.283497Z","shell.execute_reply":"2021-10-14T18:01:01.304293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_files = sorted(os.listdir('../input/rsna-miccai-png/train'))","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.30727Z","iopub.execute_input":"2021-10-14T18:01:01.307727Z","iopub.status.idle":"2021-10-14T18:01:01.354277Z","shell.execute_reply.started":"2021-10-14T18:01:01.307693Z","shell.execute_reply":"2021-10-14T18:01:01.353648Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_files)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.358392Z","iopub.execute_input":"2021-10-14T18:01:01.358578Z","iopub.status.idle":"2021-10-14T18:01:01.366528Z","shell.execute_reply.started":"2021-10-14T18:01:01.358556Z","shell.execute_reply":"2021-10-14T18:01:01.365797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_files = pd.Series(train_files, name='train_files')","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.367701Z","iopub.execute_input":"2021-10-14T18:01:01.36808Z","iopub.status.idle":"2021-10-14T18:01:01.372414Z","shell.execute_reply.started":"2021-10-14T18:01:01.36805Z","shell.execute_reply":"2021-10-14T18:01:01.371627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = pd.concat([train_labels, train_files], axis=1)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.373957Z","iopub.execute_input":"2021-10-14T18:01:01.374383Z","iopub.status.idle":"2021-10-14T18:01:01.381343Z","shell.execute_reply.started":"2021-10-14T18:01:01.374351Z","shell.execute_reply":"2021-10-14T18:01:01.380663Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.382767Z","iopub.execute_input":"2021-10-14T18:01:01.383046Z","iopub.status.idle":"2021-10-14T18:01:01.396163Z","shell.execute_reply.started":"2021-10-14T18:01:01.383013Z","shell.execute_reply":"2021-10-14T18:01:01.395422Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = train_labels[train_labels['BraTS21ID'] != 109]","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.397414Z","iopub.execute_input":"2021-10-14T18:01:01.397654Z","iopub.status.idle":"2021-10-14T18:01:01.415238Z","shell.execute_reply.started":"2021-10-14T18:01:01.397623Z","shell.execute_reply":"2021-10-14T18:01:01.414646Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = train_labels[train_labels['BraTS21ID'] != 709]","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.416349Z","iopub.execute_input":"2021-10-14T18:01:01.416571Z","iopub.status.idle":"2021-10-14T18:01:01.422864Z","shell.execute_reply.started":"2021-10-14T18:01:01.416542Z","shell.execute_reply":"2021-10-14T18:01:01.420954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"109 and 709 don't have flair images so for this dataset. ","metadata":{}},{"cell_type":"code","source":"train_labels['MGMT_value'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.424486Z","iopub.execute_input":"2021-10-14T18:01:01.424925Z","iopub.status.idle":"2021-10-14T18:01:01.434004Z","shell.execute_reply.started":"2021-10-14T18:01:01.424892Z","shell.execute_reply":"2021-10-14T18:01:01.433041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Fairly balanced train set.","metadata":{}},{"cell_type":"code","source":"test_data = pd.read_csv('../input/rsna-miccai-brain-tumor-radiogenomic-classification/sample_submission.csv')\ntest_ids = []\nfor f in test_data.itertuples():\n    test_ids.append(f[1])","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.43532Z","iopub.execute_input":"2021-10-14T18:01:01.43562Z","iopub.status.idle":"2021-10-14T18:01:01.446014Z","shell.execute_reply.started":"2021-10-14T18:01:01.435583Z","shell.execute_reply":"2021-10-14T18:01:01.445212Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a = load_3d_png(\"00000\", \"FLAIR\")\nprint(a.shape)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.448293Z","iopub.execute_input":"2021-10-14T18:01:01.448925Z","iopub.status.idle":"2021-10-14T18:01:01.959492Z","shell.execute_reply.started":"2021-10-14T18:01:01.448892Z","shell.execute_reply":"2021-10-14T18:01:01.958456Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(load_3d_png(\"00122\", \"FLAIR\")[:, :, 2], cmap='gray')","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:01.960798Z","iopub.execute_input":"2021-10-14T18:01:01.961073Z","iopub.status.idle":"2021-10-14T18:01:02.357531Z","shell.execute_reply.started":"2021-10-14T18:01:01.961038Z","shell.execute_reply":"2021-10-14T18:01:02.356844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Dataset and DataLoader**","metadata":{}},{"cell_type":"code","source":"class TumorDataset(torch.utils.data.Dataset):\n    def __init__(self, df=train_labels, transform=transforms.Compose([transforms.ToTensor()]), mri_type=\"FLAIR\", train=True):\n        self.df = df\n        self.transform = transform\n        self.type = mri_type\n        self.train = train\n    \n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, idx):\n            if self.train == True:\n                patient_id = self.df.iloc[idx, 2]\n                \n                image = load_3d_png(str(patient_id), self.type)\n                image = self.transform(image)\n                image = image[None, :, :, :]\n                label = self.df.iloc[idx, 1]\n                label = torch.tensor(label)\n                \n                return image, label\n            \n            else:\n                patient_id = self.df[idx]\n                patient_id = str(patient_id)\n                for i in range(5 - len(patient_id)):\n                    patient_id = '0' + patient_id\n                \n                \n                image = load_3d_image(patient_id, self.type, split='test')\n                image = self.transform(image)\n                image = image[None, :, :, :]\n                \n                return image, idx","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.358791Z","iopub.execute_input":"2021-10-14T18:01:02.359337Z","iopub.status.idle":"2021-10-14T18:01:02.370529Z","shell.execute_reply.started":"2021-10-14T18:01:02.359298Z","shell.execute_reply":"2021-10-14T18:01:02.369562Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dataset = TumorDataset()\ntest_dataset = TumorDataset(df=test_ids, train=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.372257Z","iopub.execute_input":"2021-10-14T18:01:02.372793Z","iopub.status.idle":"2021-10-14T18:01:02.381936Z","shell.execute_reply.started":"2021-10-14T18:01:02.372676Z","shell.execute_reply":"2021-10-14T18:01:02.381241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, num_workers=4)\ntest_loader = torch.utils.data.DataLoader(test_dataset, batch_size=BATCH_SIZE, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.383523Z","iopub.execute_input":"2021-10-14T18:01:02.383948Z","iopub.status.idle":"2021-10-14T18:01:02.390891Z","shell.execute_reply.started":"2021-10-14T18:01:02.383911Z","shell.execute_reply":"2021-10-14T18:01:02.390249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\ndevice","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.392459Z","iopub.execute_input":"2021-10-14T18:01:02.392832Z","iopub.status.idle":"2021-10-14T18:01:02.445177Z","shell.execute_reply.started":"2021-10-14T18:01:02.392797Z","shell.execute_reply":"2021-10-14T18:01:02.444485Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Simple Model Architecture**","metadata":{}},{"cell_type":"code","source":"class ThreeDNetwork(nn.Module):\n    \n    def conv_layer(self, in_channels, out_channels, kernel_size, stride=2):\n        conv_layer = nn.Sequential(\n            nn.Conv3d(in_channels, out_channels, kernel_size, stride=stride),\n            nn.LeakyReLU(),\n            nn.MaxPool3d((2, 2, 2)),\n            nn.BatchNorm3d(out_channels))\n        return conv_layer\n    \n    def __init__(self, batch_size=BATCH_SIZE):\n        super(ThreeDNetwork, self).__init__()\n        self.batch_size = batch_size\n        self.block1 = nn.Sequential(\n            self.conv_layer(1, 64, 3, 2),\n            self.conv_layer(64, 128, 3, 2))\n        \n        self.fc = nn.Sequential(\n            nn.Linear(86400, 1024),\n            nn.LeakyReLU(),\n            nn.BatchNorm1d(1024),\n            nn.Dropout(0.2),\n            nn.Linear(1024, 1))\n        \n    def forward(self, x):\n        x = self.block1(x)\n        x = x.view(-1, 86400)\n        x = self.fc(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.44683Z","iopub.execute_input":"2021-10-14T18:01:02.447099Z","iopub.status.idle":"2021-10-14T18:01:02.457198Z","shell.execute_reply.started":"2021-10-14T18:01:02.447067Z","shell.execute_reply":"2021-10-14T18:01:02.456129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = ThreeDNetwork()","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:02.458763Z","iopub.execute_input":"2021-10-14T18:01:02.459082Z","iopub.status.idle":"2021-10-14T18:01:03.142587Z","shell.execute_reply.started":"2021-10-14T18:01:02.459015Z","shell.execute_reply":"2021-10-14T18:01:03.141846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(model)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:03.1437Z","iopub.execute_input":"2021-10-14T18:01:03.145475Z","iopub.status.idle":"2021-10-14T18:01:03.15011Z","shell.execute_reply.started":"2021-10-14T18:01:03.145447Z","shell.execute_reply":"2021-10-14T18:01:03.149384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Training**","metadata":{}},{"cell_type":"code","source":"optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n\ntrain_criterion = nn.BCELoss()\nlr_scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor=0.1, patience=4, cooldown=2, verbose=True)\n\nmodel = model.to(device)\ntrain_criterion = train_criterion.to(device)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:03.151172Z","iopub.execute_input":"2021-10-14T18:01:03.151669Z","iopub.status.idle":"2021-10-14T18:01:08.38153Z","shell.execute_reply.started":"2021-10-14T18:01:03.151632Z","shell.execute_reply":"2021-10-14T18:01:08.380797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = 30\n\ntotal_train_loss = []\nbest_train_loss = np.Inf\n\nfor epoch in range(epochs): \n    print('Epoch: ', epoch + 1)\n    train_loss = []\n    train_correct = 0\n    train_total = 0\n    for image, target in train_loader:\n        optimizer.zero_grad()\n        new_target = []\n        for element in target:\n            new_target.append([element])\n        new_target = torch.tensor(new_target, dtype=torch.float)\n        image = image.float()\n        image, new_target = image.to(device), new_target.to(device)\n        output = model(image)\n        output = nn.Sigmoid()(output)\n        loss = train_criterion(output, new_target)\n        loss.backward()\n        optimizer.step()\n        train_loss.append(loss.item())\n            \n    epoch_train_loss = np.mean(train_loss)\n    print(f'Epoch {epoch + 1}, train loss: {epoch_train_loss:.4f}')\n    \n    if epoch_train_loss < best_train_loss:\n        torch.save(model.state_dict(), 'tumor.pth')\n        print('Model improved. Saving model.')\n        best_train_loss = epoch_train_loss\n        \n    lr_scheduler.step(epoch_train_loss)\n    total_train_loss.append(epoch_train_loss)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:08.385293Z","iopub.execute_input":"2021-10-14T18:01:08.385495Z","iopub.status.idle":"2021-10-14T18:01:19.747305Z","shell.execute_reply.started":"2021-10-14T18:01:08.385472Z","shell.execute_reply":"2021-10-14T18:01:19.745203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def rounding(num):\n    return math.floor(num + 0.5)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.74852Z","iopub.status.idle":"2021-10-14T18:01:19.749241Z","shell.execute_reply.started":"2021-10-14T18:01:19.749008Z","shell.execute_reply":"2021-10-14T18:01:19.749034Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_state_dict(torch.load('tumor.pth'))","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.750196Z","iopub.status.idle":"2021-10-14T18:01:19.750585Z","shell.execute_reply.started":"2021-10-14T18:01:19.75036Z","shell.execute_reply":"2021-10-14T18:01:19.750379Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"correct = 0\ntotal = 0\n\nwith torch.no_grad():\n    model.eval()\n    for image, target in train_loader:\n        new_target = []\n        for element in target:\n            new_target.append([element])\n        new_target = torch.tensor(new_target, dtype=torch.int)\n        image = image.float()\n        image, new_target = image.to(device), new_target.to(device)\n        output = model(image)\n        output = nn.Sigmoid()(output)\n        predicted = []\n        for element in output:\n            predicted.append([rounding(element)])\n        predicted = torch.tensor(predicted, dtype=torch.int)\n        predicted = predicted.to(device)\n        total += BATCH_SIZE\n\n        num_correct = 0\n        for i, element in enumerate(predicted):\n            if element == new_target[i]:\n                num_correct += 1\n                \n        correct += num_correct\n\nprint('Train Accuracy: %d %%' % (100 * correct / total))","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.751756Z","iopub.status.idle":"2021-10-14T18:01:19.752389Z","shell.execute_reply.started":"2021-10-14T18:01:19.752136Z","shell.execute_reply":"2021-10-14T18:01:19.752159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Inference**","metadata":{}},{"cell_type":"code","source":"id_series = []\nmgmt_series = []\n\nwith torch.no_grad():\n    for image, idx in test_loader:\n        image = image.float()\n        image = image.to(device)\n        output = model(image)\n        output = nn.Sigmoid()(output)\n        for element in output:\n            for el in element.cpu().numpy():\n                mgmt_series.append(float(math.trunc(el * 10000) / 10000.0))\n        idx = idx.tolist()\n        for element in idx:\n            id_series.append(element)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:14:38.962467Z","iopub.execute_input":"2021-10-14T18:14:38.962789Z","iopub.status.idle":"2021-10-14T18:14:49.824388Z","shell.execute_reply.started":"2021-10-14T18:14:38.962753Z","shell.execute_reply":"2021-10-14T18:14:49.823414Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"brats_id_series = []\nfor idx in id_series:\n    brats_id_series.append(int(test_ids[idx]))","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:14:49.826237Z","iopub.execute_input":"2021-10-14T18:14:49.826518Z","iopub.status.idle":"2021-10-14T18:14:49.831725Z","shell.execute_reply.started":"2021-10-14T18:14:49.826483Z","shell.execute_reply":"2021-10-14T18:14:49.830595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"brats_id_series = pd.Series(brats_id_series, name='BraTS21ID')\nmgmt_series = pd.Series(mgmt_series, name='MGMT_value')\ntest_preds = pd.concat([brats_id_series, mgmt_series], axis=1)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.757028Z","iopub.status.idle":"2021-10-14T18:01:19.757422Z","shell.execute_reply.started":"2021-10-14T18:01:19.757195Z","shell.execute_reply":"2021-10-14T18:01:19.757213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# prediction = pd.concat([x.set_index('BraTS21ID') for x in brats_id_series], axis=1).mean(axis=1)\n# prediction = pd.DataFrame(prediction, columns=['MGMT_value']).reset_index()\n# prediction.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.759039Z","iopub.status.idle":"2021-10-14T18:01:19.759483Z","shell.execute_reply.started":"2021-10-14T18:01:19.759268Z","shell.execute_reply":"2021-10-14T18:01:19.759289Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.760666Z","iopub.status.idle":"2021-10-14T18:01:19.761226Z","shell.execute_reply.started":"2021-10-14T18:01:19.760994Z","shell.execute_reply":"2021-10-14T18:01:19.761016Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds","metadata":{"execution":{"iopub.status.busy":"2021-10-14T18:01:19.762212Z","iopub.status.idle":"2021-10-14T18:01:19.762978Z","shell.execute_reply.started":"2021-10-14T18:01:19.762733Z","shell.execute_reply":"2021-10-14T18:01:19.762758Z"},"trusted":true},"execution_count":null,"outputs":[]}]}