{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.15","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"colab":{"provenance":[],"gpuType":"T4"},"accelerator":"GPU","kaggle":{"accelerator":"tpu1vmV38","dataSources":[{"sourceId":9912645,"sourceType":"datasetVersion","datasetId":6090971}],"dockerImageVersionId":30788,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nimport torchvision\nimport torchvision.transforms as transforms\nfrom torch.utils.data import DataLoader, Dataset\nimport os\nimport pandas as pd\nfrom PIL import Image","metadata":{"id":"bWXGS1VRIB4h","trusted":true,"execution":{"iopub.status.busy":"2024-11-15T06:52:25.457264Z","iopub.execute_input":"2024-11-15T06:52:25.457558Z","iopub.status.idle":"2024-11-15T06:52:53.686975Z","shell.execute_reply.started":"2024-11-15T06:52:25.457531Z","shell.execute_reply":"2024-11-15T06:52:53.685791Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class SimpleCNN(nn.Module):\n    def __init__(self):\n        super(SimpleCNN, self).__init__()\n        self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)\n        self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)\n        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=1, padding=1)\n        self.fc1 = nn.Linear(in_features=32 * 64 * 64, out_features=128)\n        self.fc2 = nn.Linear(in_features=128, out_features=10) # Assume 10 classes\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 * 64 * 64)\n        x = F.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n\nmodel = SimpleCNN()","metadata":{"id":"xilMnPPLISvL","trusted":true,"execution":{"iopub.status.busy":"2024-11-15T06:52:58.400472Z","iopub.execute_input":"2024-11-15T06:52:58.401581Z","iopub.status.idle":"2024-11-15T06:52:58.554203Z","shell.execute_reply.started":"2024-11-15T06:52:58.401539Z","shell.execute_reply":"2024-11-15T06:52:58.553160Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"transform = transforms.Compose([\n    transforms.Resize((256, 256)),\n    transforms.ToTensor(),\n    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n])\n\ntrainset = torchvision.datasets.ImageFolder(root= r\"/kaggle/input/geography/seg_train\", transform=transform)\ntrainloader = DataLoader(trainset, batch_size=32, shuffle=True, num_workers=2)\n\nvalset = torchvision.datasets.ImageFolder(root=r\"/kaggle/input/geography/seg_test\", transform=transform)\nvalloader = DataLoader(valset, batch_size=32, shuffle=False, num_workers=2)","metadata":{"id":"vmeEr-euIYS_","trusted":true,"execution":{"iopub.status.busy":"2024-11-15T06:52:59.697927Z","iopub.execute_input":"2024-11-15T06:52:59.698925Z","iopub.status.idle":"2024-11-15T06:53:09.717491Z","shell.execute_reply.started":"2024-11-15T06:52:59.698885Z","shell.execute_reply":"2024-11-15T06:53:09.716371Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"criterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)","metadata":{"id":"hTTJ4BtnIi5I","trusted":true,"execution":{"iopub.status.busy":"2024-11-15T06:53:09.719249Z","iopub.execute_input":"2024-11-15T06:53:09.719531Z","iopub.status.idle":"2024-11-15T06:53:09.724423Z","shell.execute_reply.started":"2024-11-15T06:53:09.719504Z","shell.execute_reply":"2024-11-15T06:53:09.723294Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"num_epochs = 4\n\nfor epoch in range(num_epochs):\n    model.train()\n    running_loss = 0.0\n    for i, data in enumerate(trainloader, 0):\n        inputs, labels = data\n        optimizer.zero_grad()\n        outputs = model(inputs)\n        loss = criterion(outputs, labels)\n        loss.backward()\n        optimizer.step()\n        running_loss += loss.item()\n        if i % 100 == 99:  # Print every 100 mini-batches\n            print(f'Epoch {epoch+1}, Batch {i+1}, Loss: {running_loss / 100:.3f}')\n            running_loss = 0.0\n\n    model.eval()\n    correct = 0\n    total = 0\n    with torch.no_grad():\n        for data in valloader:\n            images, labels = data\n            outputs = model(images)\n            _, predicted = torch.max(outputs.data, 1)\n            total += labels.size(0)\n            correct += (predicted == labels).sum().item()\n\n    print(f'Accuracy after epoch {epoch+1}: {100 * correct / total}%')\n\nprint('Finished Training')","metadata":{"id":"ZGGU7K-pIn0_","outputId":"4cfdf5d8-b338-4e74-b204-4bff0533f5fe","trusted":true,"execution":{"iopub.status.busy":"2024-11-15T06:53:09.725615Z","iopub.execute_input":"2024-11-15T06:53:09.725917Z","iopub.status.idle":"2024-11-15T07:06:09.732689Z","shell.execute_reply.started":"2024-11-15T06:53:09.725888Z","shell.execute_reply":"2024-11-15T07:06:09.731367Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}