From 603ab641c26fb419597593a4d36d07c70f8bcbb0 Mon Sep 17 00:00:00 2001 From: Vincent <simon.vincent@ecl21.ec-lyon.fr> Date: Thu, 7 Nov 2024 12:05:17 +0100 Subject: [PATCH] ex + begin ex 2 --- TD2 Deep Learning.ipynb | 479 +++++++++++++++++++++++++++++++-- final_accuracy_first_model.png | Bin 0 -> 33754 bytes perf_model_1.png | Bin 0 -> 20110 bytes 3 files changed, 454 insertions(+), 25 deletions(-) create mode 100644 final_accuracy_first_model.png create mode 100644 perf_model_1.png diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb index 00e4fdc..0b832d1 100644 --- a/TD2 Deep Learning.ipynb +++ b/TD2 Deep Learning.ipynb @@ -52,10 +52,72 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "b1950f0a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([[ 0.1159, -0.1632, 0.6574, 1.5902, -0.4352, -1.1418, 0.8810, 0.0847,\n", + " -2.4290, -0.0911],\n", + " [ 0.3400, -1.9606, -0.0214, -0.1179, -0.3917, -0.3592, 0.5251, 0.4169,\n", + " -0.8085, -0.2057],\n", + " [-0.7488, 0.7606, 0.1129, -2.6223, -0.5739, -0.4979, 2.0387, 0.1628,\n", + " 1.1597, -0.9275],\n", + " [-1.5324, 1.4420, 0.9108, 0.4737, 0.3852, -1.1974, 1.7244, 1.3268,\n", + " 1.4552, 0.5241],\n", + " [-0.3818, -0.4960, -1.5574, -0.8755, 1.2589, 0.8939, 0.0385, -2.5047,\n", + " 0.6804, -0.1951],\n", + " [ 0.1988, 0.9232, -1.3031, 1.8143, 0.0756, 1.2082, -1.1921, 0.0647,\n", + " 0.1529, 0.4644],\n", + " [ 1.8262, 0.6831, -0.1683, -0.8331, -0.5271, -0.2069, 0.5703, 1.7226,\n", + " -0.6655, -0.4297],\n", + " [-0.0630, -0.2216, 2.2132, -0.8788, 2.8345, -0.0534, -1.7918, -0.6061,\n", + " -0.2461, 0.4126],\n", + " [ 0.3832, -0.2473, -1.1898, 2.3250, 0.1655, -0.4416, -0.4937, -0.1714,\n", + " 0.6682, -0.7186],\n", + " [-0.5843, 1.7539, 0.4247, 0.5102, -1.2161, 0.2732, 1.8955, 1.5722,\n", + " 0.9527, 0.2717],\n", + " [-1.2976, 0.2779, -0.8085, 0.0037, -1.4008, -1.3840, 0.1210, 0.5056,\n", + " 0.6006, -1.5492],\n", + " [-0.1415, -0.8489, 0.3045, 2.3843, 1.4306, -0.5467, -0.2279, 0.2920,\n", + " 1.5270, -1.5247],\n", + " [-0.8661, -0.3661, 0.3478, -0.5955, 1.0730, -2.1341, -0.8818, 0.2842,\n", + " 0.8046, 0.4630],\n", + " [-0.1986, 1.3981, -0.3965, -0.6231, 2.5136, 0.1703, -1.0520, -0.4539,\n", + " -1.8835, -0.1314]])\n", + "AlexNet(\n", + " (features): Sequential(\n", + " (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n", + " (1): ReLU(inplace=True)\n", + " (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n", + " (4): ReLU(inplace=True)\n", + " (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (7): ReLU(inplace=True)\n", + " (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (9): ReLU(inplace=True)\n", + " (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (11): ReLU(inplace=True)\n", + " (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))\n", + " (classifier): Sequential(\n", + " (0): Dropout(p=0.5, inplace=False)\n", + " (1): Linear(in_features=9216, out_features=4096, bias=True)\n", + " (2): ReLU(inplace=True)\n", + " (3): Dropout(p=0.5, inplace=False)\n", + " (4): Linear(in_features=4096, out_features=4096, bias=True)\n", + " (5): ReLU(inplace=True)\n", + " (6): Linear(in_features=4096, out_features=1000, bias=True)\n", + " )\n", + ")\n" + ] + } + ], "source": [ "import torch\n", "\n", @@ -95,10 +157,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "6e18f2fd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CUDA is not available. Training on CPU ...\n" + ] + } + ], "source": [ "import torch\n", "\n", @@ -121,10 +191,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "462666a2", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to data\\cifar-10-python.tar.gz\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100.0%\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting data\\cifar-10-python.tar.gz to data\n", + "Files already downloaded and verified\n" + ] + } + ], "source": [ "import numpy as np\n", "from torchvision import datasets, transforms\n", @@ -196,7 +289,22 @@ "execution_count": null, "id": "317bf070", "metadata": {}, - "outputs": [], + "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=400, out_features=120, bias=True)\n", + " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", + " (fc3): Linear(in_features=84, out_features=10, bias=True)\n", + ")\n" + ] + } + ], "source": [ "import torch.nn as nn\n", "import torch.nn.functional as F\n", @@ -232,6 +340,125 @@ " model.cuda()" ] }, + { + "cell_type": "markdown", + "id": "02ad19e0", + "metadata": {}, + "source": [ + "Creating the model to answer question 1: " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9f3145ca", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Net_3Conv_3lin(\n", + " (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (fc1): Linear(in_features=1024, out_features=512, bias=True)\n", + " (fc2): Linear(in_features=512, out_features=64, bias=True)\n", + " (fc3): Linear(in_features=64, out_features=10, bias=True)\n", + " (dropout): Dropout(p=0.3, inplace=False)\n", + ")\n" + ] + } + ], + "source": [ + "\n", + "\n", + "class Net_3Conv_3lin(nn.Module):\n", + " def __init__(self):\n", + " super(Net_3Conv_3lin, self).__init__()\n", + " self.conv1 = nn.Conv2d(kernel_size=3 ,padding=1 ,in_channels=3, out_channels =16)\n", + " self.conv2 = nn.Conv2d(kernel_size=3 ,padding=1,in_channels=16, out_channels =32 )\n", + " self.conv3 = nn.Conv2d(kernel_size=3 ,padding=1,in_channels=32, out_channels =64 )\n", + " self.pool = nn.MaxPool2d(2, 2)\n", + " self.fc1 = nn.Linear(1024,512)\n", + " self.fc2 = nn.Linear(512,64)\n", + " self.fc3 = nn.Linear(64,10)\n", + " self.p = 0.3\n", + " self.dropout = nn.Dropout(self.p) \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 = self.pool(F.relu(self.conv3(x)))\n", + " x = x.view(-1, 64 * 4 * 4)\n", + " x = self.dropout(F.relu(self.fc1(x)))\n", + " x = self.dropout(F.relu(self.fc2(x)))\n", + " x = self.fc3(x)\n", + " return x\n", + "\n", + "\n", + "# create a complete CNN\n", + "model = Net_3Conv_3lin()\n", + "print(model)\n", + "# move tensors to GPU if CUDA is available\n", + "if train_on_gpu:\n", + " model.cuda()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating a model for training aware quatization" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71bb37b5", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "class Net_3Conv_3lin_Quant(nn.Module):\n", + " def __init__(self):\n", + " super(Net_3Conv_3lin_Quant, self).__init__()\n", + " self.quant = torch.ao.quantization.QuantStub()\n", + " self.conv1 = nn.Conv2d(kernel_size=3 ,padding=1 ,in_channels=3, out_channels =16)\n", + " self.conv2 = nn.Conv2d(kernel_size=3 ,padding=1,in_channels=16, out_channels =32 )\n", + " self.conv3 = nn.Conv2d(kernel_size=3 ,padding=1,in_channels=32, out_channels =64 )\n", + " self.pool = nn.MaxPool2d(2, 2)\n", + " self.fc1 = nn.Linear(1024,512)\n", + " self.fc2 = nn.Linear(512,64)\n", + " self.fc3 = nn.Linear(64,10)\n", + " self.p = 0.3\n", + " self.dropout = nn.Dropout(self.p) \n", + "\n", + " self.dequant = torch.ao.quantization.DeQuantStub()\n", + "\n", + " def forward(self, x):\n", + " x = self.quant(x)\n", + " x = self.pool(F.relu(self.conv1(x)))\n", + " x = self.pool(F.relu(self.conv2(x)))\n", + " x = self.pool(F.relu(self.conv3(x)))\n", + " x = x.view(-1, 64 * 4 * 4)\n", + " x = self.dropout(F.relu(self.fc1(x)))\n", + " x = self.dropout(F.relu(self.fc2(x)))\n", + " x = self.fc3(x)\n", + " x = self.dequant(x)\n", + " return x\n", + "\n", + "\n", + "# create a complete CNN\n", + "model = Net_3Conv_3lin_Quant()\n", + "print(model)\n", + "# move tensors to GPU if CUDA is available\n", + "if train_on_gpu:\n", + " model.cuda()" + ] + }, { "cell_type": "markdown", "id": "a2dc4974", @@ -242,10 +469,78 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "id": "4b53f229", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch: 0 \tTraining Loss: 45.872737 \tValidation Loss: 44.489702\n", + "Validation loss decreased (inf --> 44.489702). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 40.061390 \tValidation Loss: 36.100894\n", + "Validation loss decreased (44.489702 --> 36.100894). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 34.138645 \tValidation Loss: 31.113222\n", + "Validation loss decreased (36.100894 --> 31.113222). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 30.507358 \tValidation Loss: 28.677294\n", + "Validation loss decreased (31.113222 --> 28.677294). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 28.486533 \tValidation Loss: 26.945912\n", + "Validation loss decreased (28.677294 --> 26.945912). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 26.688108 \tValidation Loss: 25.087968\n", + "Validation loss decreased (26.945912 --> 25.087968). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 24.921677 \tValidation Loss: 23.867951\n", + "Validation loss decreased (25.087968 --> 23.867951). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 23.352516 \tValidation Loss: 21.780911\n", + "Validation loss decreased (23.867951 --> 21.780911). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 21.794870 \tValidation Loss: 21.096160\n", + "Validation loss decreased (21.780911 --> 21.096160). Saving model ...\n", + "Epoch: 9 \tTraining Loss: 20.547996 \tValidation Loss: 19.826372\n", + "Validation loss decreased (21.096160 --> 19.826372). Saving model ...\n", + "Epoch: 10 \tTraining Loss: 19.401682 \tValidation Loss: 19.596204\n", + "Validation loss decreased (19.826372 --> 19.596204). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 18.340276 \tValidation Loss: 18.632437\n", + "Validation loss decreased (19.596204 --> 18.632437). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 17.266555 \tValidation Loss: 17.758480\n", + "Validation loss decreased (18.632437 --> 17.758480). Saving model ...\n", + "Epoch: 13 \tTraining Loss: 16.353216 \tValidation Loss: 17.932480\n", + "Epoch: 14 \tTraining Loss: 15.507940 \tValidation Loss: 16.795444\n", + "Validation loss decreased (17.758480 --> 16.795444). Saving model ...\n", + "Epoch: 15 \tTraining Loss: 14.657860 \tValidation Loss: 16.382975\n", + "Validation loss decreased (16.795444 --> 16.382975). Saving model ...\n", + "Epoch: 16 \tTraining Loss: 13.861092 \tValidation Loss: 16.670121\n", + "Epoch: 17 \tTraining Loss: 12.984836 \tValidation Loss: 16.962824\n", + "Epoch: 18 \tTraining Loss: 12.257837 \tValidation Loss: 16.400703\n", + "Epoch: 19 \tTraining Loss: 11.436899 \tValidation Loss: 16.729391\n", + "Epoch: 20 \tTraining Loss: 10.915463 \tValidation Loss: 16.299635\n", + "Validation loss decreased (16.382975 --> 16.299635). Saving model ...\n", + "Epoch: 21 \tTraining Loss: 10.233074 \tValidation Loss: 16.345074\n", + "Epoch: 22 \tTraining Loss: 9.549847 \tValidation Loss: 16.705205\n", + "Epoch: 23 \tTraining Loss: 8.865565 \tValidation Loss: 16.583533\n", + "Epoch: 24 \tTraining Loss: 8.210216 \tValidation Loss: 17.112398\n", + "Epoch: 25 \tTraining Loss: 7.781697 \tValidation Loss: 17.192360\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[34], line 41\u001b[0m\n\u001b[0;32m 39\u001b[0m data, target \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mcuda(), target\u001b[38;5;241m.\u001b[39mcuda()\n\u001b[0;32m 40\u001b[0m \u001b[38;5;66;03m# Forward pass: compute predicted outputs by passing inputs to the model\u001b[39;00m\n\u001b[1;32m---> 41\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 42\u001b[0m \u001b[38;5;66;03m# Calculate the batch loss\u001b[39;00m\n\u001b[0;32m 43\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(output, target)\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", + "Cell \u001b[1;32mIn[33], line 16\u001b[0m, in \u001b[0;36mNet_3Conv_3lin.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x):\n\u001b[0;32m 15\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool(F\u001b[38;5;241m.\u001b[39mrelu(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconv1(x)))\n\u001b[1;32m---> 16\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpool\u001b[49m\u001b[43m(\u001b[49m\u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrelu\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv2\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 17\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool(F\u001b[38;5;241m.\u001b[39mrelu(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconv3(x)))\n\u001b[0;32m 18\u001b[0m x \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mview(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m64\u001b[39m \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m4\u001b[39m \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m4\u001b[39m)\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\modules\\pooling.py:213\u001b[0m, in \u001b[0;36mMaxPool2d.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 212\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: Tensor):\n\u001b[1;32m--> 213\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_pool2d\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 214\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 215\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkernel_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 216\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstride\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 217\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpadding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 218\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdilation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 219\u001b[0m \u001b[43m \u001b[49m\u001b[43mceil_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mceil_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 220\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreturn_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 221\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\_jit_internal.py:624\u001b[0m, in \u001b[0;36mboolean_dispatch.<locals>.fn\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 622\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m if_true(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 623\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 624\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mif_false\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\xxpod\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\torch\\nn\\functional.py:830\u001b[0m, in \u001b[0;36m_max_pool2d\u001b[1;34m(input, kernel_size, stride, padding, dilation, ceil_mode, return_indices)\u001b[0m\n\u001b[0;32m 828\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m stride \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 829\u001b[0m stride \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mjit\u001b[38;5;241m.\u001b[39mannotate(List[\u001b[38;5;28mint\u001b[39m], [])\n\u001b[1;32m--> 830\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_pool2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkernel_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstride\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpadding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdilation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mceil_mode\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ "import torch.optim as optim\n", "\n", @@ -254,7 +549,7 @@ "\n", "n_epochs = 30 # number of epochs to train the model\n", "train_loss_list = [] # list to store loss to visualize\n", - "valid_loss_min = np.Inf # track change in validation loss\n", + "valid_loss_min = np.inf # track change in validation loss\n", "\n", "for epoch in range(n_epochs):\n", " # Keep track of training and validation loss\n", @@ -326,17 +621,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "id": "d39df818", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Net_3Conv_3lin(\n", + " (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (fc1): Linear(in_features=1024, out_features=512, bias=True)\n", + " (fc2): Linear(in_features=512, out_features=64, bias=True)\n", + " (fc3): Linear(in_features=64, out_features=10, bias=True)\n", + " (dropout): Dropout(p=0.3, inplace=False)\n", + ")\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", - "\n", - "plt.plot(range(n_epochs), train_loss_list)\n", + "print(model)\n", + "plt.plot(range(len(train_loss_list)), train_loss_list)\n", "plt.xlabel(\"Epoch\")\n", "plt.ylabel(\"Loss\")\n", - "plt.title(\"Performance of Model 1\")\n", + "plt.title(\"Performance of Model 2\")\n", "plt.show()" ] }, @@ -350,10 +672,39 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "id": "e93efdfc", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\xxpod\\AppData\\Local\\Temp\\ipykernel_18828\\3291884398.py:1: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Loss: 16.123924\n", + "\n", + "Test Accuracy of airplane: 81% (810/1000)\n", + "Test Accuracy of automobile: 85% (855/1000)\n", + "Test Accuracy of bird: 63% (633/1000)\n", + "Test Accuracy of cat: 52% (525/1000)\n", + "Test Accuracy of deer: 69% (695/1000)\n", + "Test Accuracy of dog: 71% (717/1000)\n", + "Test Accuracy of frog: 77% (772/1000)\n", + "Test Accuracy of horse: 77% (772/1000)\n", + "Test Accuracy of ship: 84% (843/1000)\n", + "Test Accuracy of truck: 76% (765/1000)\n", + "\n", + "Test Accuracy (Overall): 73% (7387/10000)\n" + ] + } + ], "source": [ "model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n", "\n", @@ -431,7 +782,63 @@ "- The first fully connected layer will have an output size of 512.\n", "- The second fully connected layer will have an output size of 64.\n", "\n", - "Compare the results obtained with this new network to those obtained previously." + "Compare the results obtained with this new network to those obtained previously.\n", + "\n", + "ANSWER: The model is built above and named Net_Conv3_Lin3\n", + "\n", + "\n", + "Results for the previous model : \n", + "\n", + "we osberve overfitting from about the 10nth Epoch - validation loss plateaued at 22 but training loss kept on decreasing to 10 , as can be seen from the training logs:\n", + "\n", + "Epoch: 7 \tTraining Loss: 23.183946 \tValidation Loss: 24.331222\n", + "Validation loss decreased (25.691083 --> 24.331222). Saving model ...\n", + "\n", + "Epoch: 8 \tTraining Loss: 22.215979 \tValidation Loss: 23.632853\n", + "Validation loss decreased (24.331222 --> 23.632853). Saving model ...\n", + "\n", + "Epoch: 9 \tTraining Loss: 21.408623 \tValidation Loss: 23.475442\n", + "Validation loss decreased (23.632853 --> 23.475442). Saving model ...\n", + "\n", + "Epoch: 10 \tTraining Loss: 20.637072 \tValidation Loss: 23.639358\n", + "\n", + "Epoch: 11 \tTraining Loss: 19.877338 \tValidation Loss: 22.408472\n", + "Validation loss decreased (23.475442 --> 22.408472). Saving model ...\n", + "\n", + "Epoch: 12 \tTraining Loss: 19.188079 \tValidation Loss: 23.296445\n", + "\n", + "Epoch: 13 \tTraining Loss: 18.647543 \tValidation Loss: 22.897815\n", + "\n", + "Epoch: 14 \tTraining Loss: 17.989626 \tValidation Loss: 22.755968\n", + "\n", + "the performance is as follow: \n", + "\n", + "and the final accuries were:\n", + "\n", + "\n", + "\n", + "SECOND MODEL:\n", + "\n", + "for the second model, the validation loss goes lower, thougth in addition to the architectural changes, there are also just more weigth and it is longer to train.\n", + "\n", + "we archieve a valisation loss of 16, and the model is still improving after a larger number of epoch ( 20 vs 10)\n", + "\n", + "\n", + "here are the final accuracies:\n", + "Test Loss: 16.123924\n", + "\n", + "Test Accuracy of airplane: 81% (810/1000)\n", + "Test Accuracy of automobile: 85% (855/1000)\n", + "Test Accuracy of bird: 63% (633/1000)\n", + "Test Accuracy of cat: 52% (525/1000)\n", + "Test Accuracy of deer: 69% (695/1000)\n", + "Test Accuracy of dog: 71% (717/1000)\n", + "Test Accuracy of frog: 77% (772/1000)\n", + "Test Accuracy of horse: 77% (772/1000)\n", + "Test Accuracy of ship: 84% (843/1000)\n", + "Test Accuracy of truck: 76% (765/1000)\n", + "\n", + "Test Accuracy (Overall): 73% (7387/10000)" ] }, { @@ -500,6 +907,33 @@ "For each class, compare the classification test accuracy of the initial model and the quantized model. Also give the overall test accuracy for both models." ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "1458a562", + "metadata": {}, + "outputs": [], + "source": [ + "model = Net_3Conv_3lin_Quant()\n", + "print(model)\n", + "\n", + "\n", + "#prepare for fusion\n", + "model.eval()\n", + "#model.qconfig = torch.ao.quantization.get_default_qat_config('86')\n", + "#model_fused = torch.ao.quantization.fuse_modules(model,[['conv', 'relu',]])\n", + "\n", + "model.train()\n", + "model_prepared = torch.ao.quantization.prepare_qat(model)\n", + "training_loop(model_prepared)\n", + "model_prepared.eval()\n", + "model_quantized = torch.ao.quantization.convert(model_prepared)\n", + "\n", + "evaluate(model_quantized)\n", + "print_size_of_model(model_quantized)\n", + "\n" + ] + }, { "cell_type": "markdown", "id": "a0a34b90", @@ -926,7 +1360,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.5 ('base')", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -940,12 +1374,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" - }, - "vscode": { - "interpreter": { - "hash": "9e3efbebb05da2d4a1968abe9a0645745f54b63feb7a85a514e4da0495be97eb" - } + "version": "3.12.2" } }, "nbformat": 4, diff --git a/final_accuracy_first_model.png b/final_accuracy_first_model.png new file mode 100644 index 0000000000000000000000000000000000000000..f75b599e2f3cc7da8200291bb1fefe87dc2a4eb4 GIT binary patch literal 33754 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\wrZ%3u#^$ottf*ulMZy{QIIDp-S8a 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 literal 0 HcmV?d00001 diff --git a/perf_model_1.png b/perf_model_1.png new file mode 100644 index 0000000000000000000000000000000000000000..39000fab2d6965fc177cde2bf0b8e672e54ff26e GIT binary patch literal 20110 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 MUHx3vIVCg!0FAXQV*mgE literal 0 HcmV?d00001 -- GitLab