From 255a9aa73caacdcf8383daa52a860b9bf3e0037b Mon Sep 17 00:00:00 2001 From: KeshavAnandCode Date: Wed, 18 Mar 2026 17:56:49 -0500 Subject: [PATCH] finished CNN class --- ...l-training-v1.ipynb => tutorial-cnn.ipynb} | 106 ++++++++++++++++-- 1 file changed, 99 insertions(+), 7 deletions(-) rename notebooks/{model-training-v1.ipynb => tutorial-cnn.ipynb} (92%) diff --git a/notebooks/model-training-v1.ipynb b/notebooks/tutorial-cnn.ipynb similarity index 92% rename from notebooks/model-training-v1.ipynb rename to notebooks/tutorial-cnn.ipynb index c171d74..0418348 100644 --- a/notebooks/model-training-v1.ipynb +++ b/notebooks/tutorial-cnn.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "7a37220a", "metadata": {}, "outputs": [ @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "d318d1f0", "metadata": {}, "outputs": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "5604ace3", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "3cedd586", "metadata": {}, "outputs": [ @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "8f556b22", "metadata": {}, "outputs": [ @@ -184,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "37793c77", "metadata": {}, "outputs": [ @@ -222,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "f68c1a25", "metadata": {}, "outputs": [ @@ -244,6 +244,98 @@ "\n", "print(f\"Train: {len(train_dataset)}, Test: {len(test_dataset)}\")" ] + }, + { + "cell_type": "markdown", + "id": "2eede814", + "metadata": {}, + "source": [ + "Load the data into batches for faster loading...use 4 threads on CPU\n", + "\n", + "Shuffling train dataset so as to not overfit on one class" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e1539eaa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + } + ], + "source": [ + "train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4)\n", + "test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False, num_workers=4)\n", + "\n", + "classes = ('bicycle', 'bus', 'car', 'motorcycle',\n", + " 'nonvehicles', 'taxi', 'truck', 'van')\n", + "\n", + "print(len(classes))" + ] + }, + { + "cell_type": "markdown", + "id": "acebe98e", + "metadata": {}, + "source": [ + "Tutorial CNN architecture implmenetation" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d1b7d9ca", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Net(\n", + " (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))\n", + " (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n", + " (fc1): Linear(in_features=2704, out_features=120, bias=True)\n", + " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", + " (fc3): Linear(in_features=84, out_features=8, bias=True)\n", + ")\n" + ] + } + ], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "class Net(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.conv1 = nn.Conv2d(3, 6, 5) # 3 input channels for RGB, 6 filters [arbitrailly chosen ffrom PyTorch], 5x5 Kernel Size\n", + " self.pool = nn.MaxPool2d(2, 2) # Halves spatial dimensions\n", + " self.conv2 = nn.Conv2d(6, 16, 5) # 6 matches output of first conv layer, 16 arbitrary filter (more than earlier), 5x5 kernel\n", + " self.fc1 = nn.Linear(16 * 13 * 13, 120) # 16 channels from conv layer 2; 13 *13 bc shape after 2 layers and 2 pools, 120 is arbitrary output size from tutorial\n", + " self.fc2 = nn.Linear(120, 84) # 120 output from fc1 --> arbitrary lowering to 84\n", + " self.fc3 = nn.Linear(84, len(classes)) # Bring down to number of classes \n", + "\n", + " def forward(self, x):\n", + " x = self.pool(F.relu(self.conv1(x))) #Conv layer 1 --> relu --> pool \n", + " x = self.pool(F.relu(self.conv2(x))) #Conv layer 1 --> relu --> pool \n", + " x = torch.flatten(x, 1) # Flattedn to 1d\n", + " x = F.relu(self.fc1(x)) #fully connected layer shriking 1\n", + " x = F.relu(self.fc2(x)) # Shrink again\n", + " x = self.fc3(x) # Shrink to number of classes\n", + " return x\n", + "\n", + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "model = Net().to(device)\n", + "print(model)" + ] } ], "metadata": {