{"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":"# Importing Libraries","metadata":{}},{"cell_type":"code","source":"import os\nimport pandas as pd\nfrom torch.utils.data import Dataset\nfrom PIL import Image\nfrom torchvision import transforms\nimport torch\nfrom torch import nn\nfrom torch import optim\nfrom torch.utils.data import DataLoader\nfrom sklearn.metrics import roc_auc_score","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install torch","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:54:32.448109Z","iopub.execute_input":"2023-07-02T15:54:32.448538Z","iopub.status.idle":"2023-07-02T15:54:47.640140Z","shell.execute_reply.started":"2023-07-02T15:54:32.448505Z","shell.execute_reply":"2023-07-02T15:54:47.638612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Preparation","metadata":{}},{"cell_type":"markdown","source":"**Reading Labels**","metadata":{}},{"cell_type":"code","source":"# Veri setinin bulunduğu dizin\ndata_dir = '/kaggle/input/histopathologic-cancer-detection'\n\n# Etiketlerin bulunduğu CSV dosyasını okuyun\nlabels = pd.read_csv(os.path.join(data_dir, '/kaggle/input/histopathologic-cancer-detection/train_labels.csv'))","metadata":{"execution":{"iopub.status.busy":"2023-07-02T16:03:49.358897Z","iopub.execute_input":"2023-07-02T16:03:49.359420Z","iopub.status.idle":"2023-07-02T16:03:49.671034Z","shell.execute_reply.started":"2023-07-02T16:03:49.359383Z","shell.execute_reply":"2023-07-02T16:03:49.669730Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Defining Conversions**","metadata":{}},{"cell_type":"code","source":"# Görüntülerin normalleştirilmesi için dönüşümleri tanımlayın\ndata_transforms = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:53:12.908747Z","iopub.execute_input":"2023-07-02T15:53:12.909155Z","iopub.status.idle":"2023-07-02T15:53:12.916037Z","shell.execute_reply.started":"2023-07-02T15:53:12.909124Z","shell.execute_reply":"2023-07-02T15:53:12.914545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Defining Dataset Class**","metadata":{}},{"cell_type":"code","source":"class CancerDataset(Dataset):\n    def __init__(self, data_dir, labels, transform=None):\n        self.data_dir = data_dir\n        self.labels = labels\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.labels)\n\n    def __getitem__(self, idx):\n        img_name = os.path.join(self.data_dir, self.labels.iloc[idx, 0] + '.tif')\n        image = Image.open(img_name)\n        label = self.labels.iloc[idx, 1]\n\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:53:32.078906Z","iopub.execute_input":"2023-07-02T15:53:32.079336Z","iopub.status.idle":"2023-07-02T15:53:32.088335Z","shell.execute_reply.started":"2023-07-02T15:53:32.079298Z","shell.execute_reply":"2023-07-02T15:53:32.086922Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Creating and Splitting a Data Set**","metadata":{}},{"cell_type":"code","source":"# Veri setini oluşturun\ndataset = CancerDataset(data_dir=os.path.join(data_dir, 'train'), labels=labels, transform=data_transforms)\n\n# Veri setini eğitim ve doğrulama setlerine ayırın\ntrain_size = int(0.8 * len(dataset))\nval_size = len(dataset) - train_size\ntrain_dataset, val_dataset = torch.utils.data.random_split(dataset, [train_size, val_size])","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:55:03.990658Z","iopub.execute_input":"2023-07-02T15:55:03.991045Z","iopub.status.idle":"2023-07-02T15:55:04.055746Z","shell.execute_reply.started":"2023-07-02T15:55:03.991017Z","shell.execute_reply":"2023-07-02T15:55:04.054585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Building","metadata":{}},{"cell_type":"markdown","source":"**Defining the CNN Model**","metadata":{}},{"cell_type":"code","source":"class CNN(nn.Module):\n    def __init__(self):\n        super(CNN, self).__init__()\n        self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)\n        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n        self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)\n        self.fc1 = nn.Linear(32 * 16 * 16, 512)\n        self.fc2 = nn.Linear(512, 1)\n        self.sigmoid = nn.Sigmoid()\n\n    def forward(self, x):\n        x = self.pool(F.relu(self.conv1(x)))\n        x = self.pool(F.relu(self.conv2(x)))\n        x = x.view(-1, 32 * 16 * 16)\n        x = F.relu(self.fc1(x))\n        x = self.sigmoid(self.fc2(x))\n        return x","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:56:40.149111Z","iopub.execute_input":"2023-07-02T15:56:40.149618Z","iopub.status.idle":"2023-07-02T15:56:40.164559Z","shell.execute_reply.started":"2023-07-02T15:56:40.149585Z","shell.execute_reply":"2023-07-02T15:56:40.162700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model Initialization**","metadata":{}},{"cell_type":"code","source":"model = CNN()\n\n# If a GPU is available, move the model to GPU\nif torch.cuda.is_available():\n    model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:56:47.506767Z","iopub.execute_input":"2023-07-02T15:56:47.507353Z","iopub.status.idle":"2023-07-02T15:56:47.585053Z","shell.execute_reply.started":"2023-07-02T15:56:47.507305Z","shell.execute_reply":"2023-07-02T15:56:47.583719Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Training","metadata":{}},{"cell_type":"markdown","source":"**Defining Loss Function and Optimizer**","metadata":{}},{"cell_type":"code","source":"# Binary Cross-Entropy loss\ncriterion = nn.BCELoss()\n\n# Adam optimizer\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n# If a GPU is available, move the criterion to GPU\nif torch.cuda.is_available():\n    criterion = criterion.cuda()","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:58:01.179322Z","iopub.execute_input":"2023-07-02T15:58:01.179721Z","iopub.status.idle":"2023-07-02T15:58:01.186486Z","shell.execute_reply.started":"2023-07-02T15:58:01.179689Z","shell.execute_reply":"2023-07-02T15:58:01.185186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Defining Data Loaders**","metadata":{}},{"cell_type":"code","source":"# Data loaders for the training and validation sets\ntrain_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\nval_loader = DataLoader(val_dataset, batch_size=64, shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2023-07-02T15:58:17.998128Z","iopub.execute_input":"2023-07-02T15:58:17.998622Z","iopub.status.idle":"2023-07-02T15:58:18.006373Z","shell.execute_reply.started":"2023-07-02T15:58:17.998584Z","shell.execute_reply":"2023-07-02T15:58:18.004713Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Training the Model**","metadata":{}},{"cell_type":"code","source":"class CancerDataset(Dataset):\n    def __init__(self, data_dir, labels, transform=None):\n        self.data_dir = data_dir\n        self.labels = labels\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.labels)\n\n    def __getitem__(self, idx):\n        img_name = os.path.join(self.data_dir, self.labels.iloc[idx, 0] + '.tif')\n        image = Image.open(img_name)\n        label = self.labels.iloc[idx, 1]\n\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label\n\n# Veri setini oluşturun\ndataset = CancerDataset(data_dir='/kaggle/input/histopathologic-cancer-detection/train', labels=labels, transform=data_transforms)","metadata":{"execution":{"iopub.status.busy":"2023-07-02T16:05:34.250379Z","iopub.execute_input":"2023-07-02T16:05:34.250836Z","iopub.status.idle":"2023-07-02T16:05:34.260791Z","shell.execute_reply.started":"2023-07-02T16:05:34.250801Z","shell.execute_reply":"2023-07-02T16:05:34.259181Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Evaluation","metadata":{}},{"cell_type":"markdown","source":"**Defining the Evaluation Function**","metadata":{}},{"cell_type":"code","source":"def evaluate_model(model, data_loader):\n    model.eval()  # Set the model to evaluation mode\n    outputs_list = []\n    labels_list = []\n\n    with torch.no_grad():  # Do not calculate gradients to speed up computation\n        for inputs, labels in data_loader:\n            inputs = inputs.to(device)\n            labels = labels.to(device)\n            outputs = model(inputs)\n            outputs_list.extend(outputs.detach().cpu().numpy())\n            labels_list.extend(labels.detach().cpu().numpy())\n\n    auc = roc_auc_score(labels_list, outputs_list)\n    return auc","metadata":{"execution":{"iopub.status.busy":"2023-07-02T16:07:03.881929Z","iopub.execute_input":"2023-07-02T16:07:03.882438Z","iopub.status.idle":"2023-07-02T16:07:03.896694Z","shell.execute_reply.started":"2023-07-02T16:07:03.882391Z","shell.execute_reply":"2023-07-02T16:07:03.895396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Evaluating the Model**","metadata":{}},{"cell_type":"code","source":"class CancerDataset(Dataset):\n    def __init__(self, data_dir, labels, transform=None):\n        self.data_dir = data_dir\n        self.labels = labels\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.labels)\n\n    def __getitem__(self, idx):\n        img_name = os.path.join(self.data_dir, self.labels.iloc[idx, 0] + '.tif')\n        image = Image.open(img_name)\n        label = self.labels.iloc[idx, 1]\n\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label\n\n# Veri setini oluşturun\ndataset = CancerDataset(data_dir='/kaggle/input/histopathologic-cancer-detection/train/', labels=labels, transform=data_transforms)","metadata":{"execution":{"iopub.status.busy":"2023-07-02T16:08:39.802434Z","iopub.execute_input":"2023-07-02T16:08:39.802827Z","iopub.status.idle":"2023-07-02T16:08:39.812909Z","shell.execute_reply.started":"2023-07-02T16:08:39.802799Z","shell.execute_reply":"2023-07-02T16:08:39.811204Z"},"trusted":true},"execution_count":null,"outputs":[]}]}