Sanacd commited on
Commit
f84ff05
·
verified ·
1 Parent(s): 693a128

Upload 3 files

Browse files
Files changed (3) hide show
  1. CNNModel.pth +3 -0
  2. a6_main.ipynb +279 -0
  3. a6_model_Sana.ipynb +197 -0
CNNModel.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:743c5bd5649673a5fbe1a54c3461a887b0f58a9a2b4087dd447d349629335718
3
+ size 24202490
a6_main.ipynb ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 29,
6
+ "id": "db12ed37",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import time\n",
11
+ "import random\n",
12
+ "import numpy as np\n",
13
+ "import torch as tr\n",
14
+ "import torchvision as tv\n",
15
+ "import os"
16
+ ]
17
+ },
18
+ {
19
+ "cell_type": "code",
20
+ "execution_count": 37,
21
+ "id": "17b5ddc1",
22
+ "metadata": {},
23
+ "outputs": [
24
+ {
25
+ "name": "stdout",
26
+ "output_type": "stream",
27
+ "text": [
28
+ "Current working directory: C:\\Users\\upm\\Untitled Folder\n"
29
+ ]
30
+ }
31
+ ],
32
+ "source": [
33
+ "os.chdir(r\"C:\\Users\\upm\\Untitled Folder\")\n",
34
+ "print(\"Current working directory:\", os.getcwd())"
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "code",
39
+ "execution_count": 38,
40
+ "id": "6f25f03e",
41
+ "metadata": {},
42
+ "outputs": [
43
+ {
44
+ "name": "stdout",
45
+ "output_type": "stream",
46
+ "text": [
47
+ "TinyImageNet dataset already exists.\n"
48
+ ]
49
+ }
50
+ ],
51
+ "source": [
52
+ "import urllib.request\n",
53
+ "import zipfile\n",
54
+ "\n",
55
+ "# Define the URL to the TinyImageNet dataset\n",
56
+ "dataset_url = 'http://cs231n.stanford.edu/tiny-imagenet-200.zip'\n",
57
+ "dataset_dir = 'tiny-imagenet-200'\n",
58
+ "\n",
59
+ "# Check if the dataset directory already exists, if not, download the dataset\n",
60
+ "if not os.path.exists(dataset_dir):\n",
61
+ " print(\"Downloading TinyImageNet...\")\n",
62
+ " # Download the dataset\n",
63
+ " urllib.request.urlretrieve(dataset_url, 'tiny-imagenet-200.zip')\n",
64
+ " \n",
65
+ " # Extract the dataset\n",
66
+ " with zipfile.ZipFile('tiny-imagenet-200.zip', 'r') as zip_ref:\n",
67
+ " zip_ref.extractall()\n",
68
+ " \n",
69
+ " print(\"TinyImageNet dataset downloaded and extracted.\")\n",
70
+ "else:\n",
71
+ " print(\"TinyImageNet dataset already exists.\")\n"
72
+ ]
73
+ },
74
+ {
75
+ "cell_type": "code",
76
+ "execution_count": 39,
77
+ "id": "b4dff407",
78
+ "metadata": {},
79
+ "outputs": [],
80
+ "source": [
81
+ "from torchvision import datasets, transforms\n",
82
+ "from torch.utils.data import DataLoader\n",
83
+ "\n",
84
+ "dataset_dir = r'C:\\Users\\upm\\Untitled Folder\\tiny-imagenet-200'\n",
85
+ "\n",
86
+ "transform = transforms.Compose([\n",
87
+ " transforms.Resize(64),\n",
88
+ " transforms.ToTensor(),\n",
89
+ " transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n",
90
+ "])\n",
91
+ "\n",
92
+ "# Load the training and validation datasets\n",
93
+ "train_data = datasets.ImageFolder(root=os.path.join(dataset_dir, 'train'), transform=transform)\n",
94
+ "\n",
95
+ "val_data = datasets.ImageFolder(root=os.path.join(dataset_dir, 'val'), transform=transform)\n",
96
+ "\n",
97
+ "train_loader = DataLoader(train_data, batch_size=128, shuffle=True)\n",
98
+ "val_loader = DataLoader(val_data, batch_size=128, shuffle=False)\n"
99
+ ]
100
+ },
101
+ {
102
+ "cell_type": "code",
103
+ "execution_count": 40,
104
+ "id": "72b665d0",
105
+ "metadata": {},
106
+ "outputs": [],
107
+ "source": []
108
+ },
109
+ {
110
+ "cell_type": "code",
111
+ "execution_count": 41,
112
+ "id": "39b0b177",
113
+ "metadata": {},
114
+ "outputs": [
115
+ {
116
+ "name": "stdout",
117
+ "output_type": "stream",
118
+ "text": [
119
+ "Epoch 1: Train Acc: 0.4% - Val Acc: 0.0% - Loss: 5.3022\n",
120
+ "Epoch 2: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.3020\n",
121
+ "Epoch 3: Train Acc: 0.4% - Val Acc: 0.0% - Loss: 5.3023\n",
122
+ "Epoch 4: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.3001\n",
123
+ "Epoch 5: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.2992\n",
124
+ "Epoch 6: Train Acc: 0.4% - Val Acc: 0.0% - Loss: 5.2990\n",
125
+ "Epoch 7: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.2984\n",
126
+ "Epoch 8: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.2984\n",
127
+ "Epoch 9: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.2984\n",
128
+ "Epoch 10: Train Acc: 0.5% - Val Acc: 0.0% - Loss: 5.2984\n",
129
+ "Training Complete in 11.52 minutes\n"
130
+ ]
131
+ }
132
+ ],
133
+ "source": [
134
+ "import import_ipynb\n",
135
+ "from a6_model_Sana import CNNModel\n",
136
+ "import torch\n",
137
+ "import torch.optim as optim\n",
138
+ "import torch.nn as nn\n",
139
+ "from torch.utils.data import DataLoader\n",
140
+ "import time\n",
141
+ "\n",
142
+ "loss_func = nn.CrossEntropyLoss()\n",
143
+ "\n",
144
+ "optimizer = optim.Adam(model.parameters(), lr=0.01)\n",
145
+ "\n",
146
+ "\n",
147
+ "scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)\n",
148
+ "\n",
149
+ "\n",
150
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
151
+ "model.to(device)\n",
152
+ "\n",
153
+ "num_epochs = 10 # Train for 10 epochs\n",
154
+ "train_losses, val_accuracies = [], []\n",
155
+ "\n",
156
+ "start_time = time.time()\n",
157
+ "\n",
158
+ "for epoch in range(num_epochs):\n",
159
+ " model.train()\n",
160
+ " running_loss = 0.0\n",
161
+ " correct, total = 0, 0\n",
162
+ " for images, labels in train_loader:\n",
163
+ " images, labels = images.to(device), labels.to(device)\n",
164
+ "\n",
165
+ " optimizer.zero_grad()\n",
166
+ " outputs = model(images)\n",
167
+ " loss = loss_func(outputs, labels)\n",
168
+ " loss.backward()\n",
169
+ " optimizer.step()\n",
170
+ "\n",
171
+ " running_loss += loss.item()\n",
172
+ " _, predicted = torch.max(outputs.data, 1)\n",
173
+ " total += labels.size(0)\n",
174
+ " correct += (predicted == labels).sum().item()\n",
175
+ " scheduler.step()\n",
176
+ " \n",
177
+ " train_accuracy = 100 * correct / total\n",
178
+ " train_losses.append(running_loss / len(train_loader))\n",
179
+ " \n",
180
+ " model.eval()\n",
181
+ " correct, total = 0, 0\n",
182
+ " with torch.no_grad():\n",
183
+ " for images, labels in val_loader:\n",
184
+ " images, labels = images.to(device), labels.to(device)\n",
185
+ " outputs = model(images)\n",
186
+ " _, predicted = torch.max(outputs.data, 1)\n",
187
+ " total += labels.size(0)\n",
188
+ " correct += (predicted == labels).sum().item()\n",
189
+ " \n",
190
+ " val_accuracy = 100 * correct / total\n",
191
+ " val_accuracies.append(val_accuracy)\n",
192
+ " epoch_loss = running_loss / len(train_loader)\n",
193
+ " \n",
194
+ " print(f\"Epoch {epoch+1}: Train Acc: {train_accuracy:.1f}% - Val Acc: {val_accuracy:.1f}% - Loss: {epoch_loss:.4f}\")\n",
195
+ "\n",
196
+ "end_time = time.time()\n",
197
+ "print(f\"Training Complete in {((end_time - start_time)/60):.2f} minutes\")\n",
198
+ "\n"
199
+ ]
200
+ },
201
+ {
202
+ "cell_type": "code",
203
+ "execution_count": 46,
204
+ "id": "b9cdd9bb",
205
+ "metadata": {},
206
+ "outputs": [],
207
+ "source": [
208
+ "torch.save(model.state_dict(), \"CNNModel.pth\")"
209
+ ]
210
+ },
211
+ {
212
+ "cell_type": "code",
213
+ "execution_count": 47,
214
+ "id": "e0436de2",
215
+ "metadata": {},
216
+ "outputs": [
217
+ {
218
+ "name": "stdout",
219
+ "output_type": "stream",
220
+ "text": [
221
+ "\n",
222
+ "Training Summary:\n",
223
+ "Reaching Training Accuracy: 0.4%\n",
224
+ "Reaching Validation Accuracy: 0.0%\n"
225
+ ]
226
+ }
227
+ ],
228
+ "source": [
229
+ "print(\"\\nTraining Summary:\")\n",
230
+ "print(f\"Reaching Training Accuracy: {train_accuracy:.1f}%\")\n",
231
+ "print(f\"Reaching Validation Accuracy: {val_accuracy:.1f}%\")"
232
+ ]
233
+ },
234
+ {
235
+ "cell_type": "code",
236
+ "execution_count": 48,
237
+ "id": "eb1e698f",
238
+ "metadata": {},
239
+ "outputs": [
240
+ {
241
+ "name": "stdout",
242
+ "output_type": "stream",
243
+ "text": [
244
+ "GPU: NVIDIA GeForce RTX 3060 with 12.0 GB RAM\n"
245
+ ]
246
+ }
247
+ ],
248
+ "source": [
249
+ "if torch.cuda.is_available():\n",
250
+ " gpu_name = torch.cuda.get_device_name(0)\n",
251
+ " total_memory = torch.cuda.get_device_properties(0).total_memory / (1024**3) # Convert bytes to GB\n",
252
+ " print(f\"GPU: {gpu_name} with {total_memory:.1f} GB RAM\")\n",
253
+ "else:\n",
254
+ " print(\"No GPU detected.\")\n"
255
+ ]
256
+ }
257
+ ],
258
+ "metadata": {
259
+ "kernelspec": {
260
+ "display_name": "Python 3 (ipykernel)",
261
+ "language": "python",
262
+ "name": "python3"
263
+ },
264
+ "language_info": {
265
+ "codemirror_mode": {
266
+ "name": "ipython",
267
+ "version": 3
268
+ },
269
+ "file_extension": ".py",
270
+ "mimetype": "text/x-python",
271
+ "name": "python",
272
+ "nbconvert_exporter": "python",
273
+ "pygments_lexer": "ipython3",
274
+ "version": "3.11.5"
275
+ }
276
+ },
277
+ "nbformat": 4,
278
+ "nbformat_minor": 5
279
+ }
a6_model_Sana.ipynb ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 3,
6
+ "id": "17d453bb",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "name": "stdout",
11
+ "output_type": "stream",
12
+ "text": [
13
+ "Current working directory: C:\\Users\\upm\\Untitled Folder\n"
14
+ ]
15
+ }
16
+ ],
17
+ "source": [
18
+ "import os\n",
19
+ "print(\"Current working directory:\", os.getcwd())\n"
20
+ ]
21
+ },
22
+ {
23
+ "cell_type": "code",
24
+ "execution_count": 5,
25
+ "id": "abd68c23",
26
+ "metadata": {},
27
+ "outputs": [
28
+ {
29
+ "name": "stdout",
30
+ "output_type": "stream",
31
+ "text": [
32
+ "CNNModel(\n",
33
+ " (conv1): Conv2d(3, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n",
34
+ " (conv2): Conv2d(64, 128, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n",
35
+ " (conv3): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
36
+ " (conv4): Conv2d(256, 384, kernel_size=(5, 5), stride=(1, 1), padding=(1, 1))\n",
37
+ " (conv5): Conv2d(384, 256, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))\n",
38
+ " (adaptive_pool): AdaptiveAvgPool2d(output_size=(3, 3))\n",
39
+ " (fc1): Linear(in_features=2304, out_features=1024, bias=True)\n",
40
+ " (fc2): Linear(in_features=1024, out_features=512, bias=True)\n",
41
+ " (fc3): Linear(in_features=512, out_features=200, bias=True)\n",
42
+ " (dropout): Dropout(p=0.1, inplace=False)\n",
43
+ ")\n"
44
+ ]
45
+ }
46
+ ],
47
+ "source": [
48
+ "import torch as tr\n",
49
+ "import torch.nn as nn\n",
50
+ "import torch.nn.functional as F\n",
51
+ "\n",
52
+ "class CNNModel(tr.nn.Module):\n",
53
+ " def __init__(self):\n",
54
+ " super(CNNModel, self).__init__()\n",
55
+ "\n",
56
+ " # Conv Layer 1: 64 channels, 5x5 kernel, padding=2\n",
57
+ " self.conv1 = nn.Conv2d(3, 64, kernel_size=5, padding=2,stride=1)\n",
58
+ " # Conv Layer 2: 128 channels, 5x5 kernel, padding=2\n",
59
+ " self.conv2 = nn.Conv2d(64, 128, kernel_size=5, padding=2)\n",
60
+ " # Conv Layer 3: 256 channels, 3x3 kernel, padding=1\n",
61
+ " self.conv3 = nn.Conv2d(128, 256, kernel_size=3, padding=1)\n",
62
+ " # Conv Layer 4: 384 channels, 5x5 kernel, padding=1\n",
63
+ " self.conv4 = nn.Conv2d(256, 384, kernel_size=5, padding=1)\n",
64
+ " # Conv Layer 5: 256 channels, 1x1 kernel, padding=1\n",
65
+ " self.conv5 = nn.Conv2d(384, 256, kernel_size=1, padding=1)\n",
66
+ "\n",
67
+ " # Adaptive Average Pooling Layer\n",
68
+ " self.adaptive_pool = nn.AdaptiveAvgPool2d((3, 3))\n",
69
+ "\n",
70
+ " # Fully Connected Layers\n",
71
+ " self.fc1 = nn.Linear(256 * 3 * 3, 1024)\n",
72
+ " self.fc2 = nn.Linear(1024, 512)\n",
73
+ " self.fc3 = nn.Linear(512, 200)\n",
74
+ "\n",
75
+ " # Dropout Layers\n",
76
+ " self.dropout = nn.Dropout(p=0.1)\n",
77
+ "\n",
78
+ " def init_weights(self):\n",
79
+ " tr.nn.init.normal_(self.linear1.weight, mean=0.0, std=0.01)\n",
80
+ " tr.nn.init.normal_(self.linear2.weight, mean=0.0, std=0.01)\n",
81
+ " tr.nn.init.normal_(self.linear3.weight, mean=0.0, std=0.01)\n",
82
+ " \n",
83
+ " def init_weights(self):\n",
84
+ " # Initialize weights with normal distribution and biases with ones\n",
85
+ " tr.nn.init.normal_(self.conv1.weight, mean=0.0, std=0.01)\n",
86
+ " tr.nn.init.normal_(self.conv2.weight, mean=0.0, std=0.01)\n",
87
+ " tr.nn.init.normal_(self.conv3.weight, mean=0.0, std=0.01)\n",
88
+ " tr.nn.init.normal_(self.conv4.weight, mean=0.0, std=0.01)\n",
89
+ " tr.nn.init.normal_(self.conv5.weight, mean=0.0, std=0.01)\n",
90
+ " tr.nn.init.ones_(self.conv1.bias)\n",
91
+ " tr.nn.init.ones_(self.conv2.bias)\n",
92
+ " tr.nn.init.ones_(self.conv3.bias)\n",
93
+ " tr.nn.init.ones_(self.conv4.bias)\n",
94
+ " tr.nn.init.ones_(self.conv5.bias)\n",
95
+ " tr.nn.init.normal_(self.fc1.weight, mean=0.0, std=0.01)\n",
96
+ " tr.nn.init.normal_(self.fc2.weight, mean=0.0, std=0.01)\n",
97
+ " tr.nn.init.normal_(self.fc3.weight, mean=0.0, std=0.01)\n",
98
+ " tr.nn.init.ones_(self.fc1.bias)\n",
99
+ " tr.nn.init.ones_(self.fc2.bias)\n",
100
+ " tr.nn.init.ones_(self.fc3.bias)\n",
101
+ "\n",
102
+ " def forward(self, x):\n",
103
+ " # Apply Conv Layer 1, ReLU, and Max Pooling\n",
104
+ " x = self.conv1(x)\n",
105
+ " x = F.relu(x)\n",
106
+ " x = F.max_pool2d(x, kernel_size=2, stride=2)\n",
107
+ "\n",
108
+ " # Apply Conv Layer 2, ReLU, and Max Pooling\n",
109
+ " x = self.conv2(x)\n",
110
+ " x = F.relu(x)\n",
111
+ " x = F.max_pool2d(x, kernel_size=2, stride=2)\n",
112
+ "\n",
113
+ " # Apply Conv Layer 3, ReLU, and Max Pooling\n",
114
+ " x = self.conv3(x)\n",
115
+ " x = F.relu(x)\n",
116
+ " x = F.max_pool2d(x, kernel_size=2, stride=2)\n",
117
+ "\n",
118
+ " # Apply Conv Layer 4 and ReLU\n",
119
+ " x = self.conv4(x)\n",
120
+ " x = F.relu(x)\n",
121
+ "\n",
122
+ " # Apply Conv Layer 5 and ReLU\n",
123
+ " x = self.conv5(x)\n",
124
+ " x = F.relu(x)\n",
125
+ "\n",
126
+ " # Apply Adaptive Average Pooling\n",
127
+ " x = self.adaptive_pool(x)\n",
128
+ "\n",
129
+ " # Flatten the output\n",
130
+ " x = x.flatten(1)\n",
131
+ "\n",
132
+ " # Fully connected layer 1 and dropout\n",
133
+ " x = self.dropout(x)\n",
134
+ " x = self.fc1(x)\n",
135
+ " x = F.relu(x)\n",
136
+ " \n",
137
+ "\n",
138
+ " # Fully connected layer 2 and dropout\n",
139
+ " x = self.dropout(x)\n",
140
+ " x = self.fc2(x)\n",
141
+ " x = F.relu(x)\n",
142
+ " \n",
143
+ "\n",
144
+ " # Fully connected layer 3 \n",
145
+ " x = self.fc3(x)\n",
146
+ " \n",
147
+ " return x\n",
148
+ "\n",
149
+ "# Instantiate the model\n",
150
+ "model = CNNModel()\n",
151
+ "\n",
152
+ "# Initialize weights\n",
153
+ "model.init_weights()\n",
154
+ "\n",
155
+ "# Print the model summary (for verification)\n",
156
+ "print(model)"
157
+ ]
158
+ },
159
+ {
160
+ "cell_type": "code",
161
+ "execution_count": null,
162
+ "id": "047a914d",
163
+ "metadata": {},
164
+ "outputs": [],
165
+ "source": []
166
+ },
167
+ {
168
+ "cell_type": "code",
169
+ "execution_count": null,
170
+ "id": "18cfbd55",
171
+ "metadata": {},
172
+ "outputs": [],
173
+ "source": []
174
+ }
175
+ ],
176
+ "metadata": {
177
+ "kernelspec": {
178
+ "display_name": "Python 3 (ipykernel)",
179
+ "language": "python",
180
+ "name": "python3"
181
+ },
182
+ "language_info": {
183
+ "codemirror_mode": {
184
+ "name": "ipython",
185
+ "version": 3
186
+ },
187
+ "file_extension": ".py",
188
+ "mimetype": "text/x-python",
189
+ "name": "python",
190
+ "nbconvert_exporter": "python",
191
+ "pygments_lexer": "ipython3",
192
+ "version": "3.11.5"
193
+ }
194
+ },
195
+ "nbformat": 4,
196
+ "nbformat_minor": 5
197
+ }