diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb
index 2ecfce959ae6b947b633a758433f9bea0bf6992e..d9e47be0b1befdefb4ed6683bcab7c194eb82a71 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([[ 1.6145,  0.4110,  1.3518,  0.4795, -0.2919, -0.3766, -2.6910,  1.5084,\n",
+      "          1.0654,  0.6444],\n",
+      "        [ 0.0448,  1.1987,  0.5144, -0.2416, -0.9144,  0.1413, -0.2351, -1.2182,\n",
+      "          1.0446, -1.4386],\n",
+      "        [ 1.6857, -1.3166, -0.6720, -1.7248,  0.1478, -0.0817,  0.3910, -0.6348,\n",
+      "         -2.4307, -0.6900],\n",
+      "        [-0.9769,  0.7784, -0.9618,  1.0623,  0.4976,  0.8609,  1.3821,  0.2586,\n",
+      "          1.0039, -0.5892],\n",
+      "        [ 1.1374, -0.5088, -1.0322,  0.6746, -1.8558, -2.0902, -0.5974,  0.2525,\n",
+      "          2.7039,  0.7704],\n",
+      "        [ 2.1928,  0.8057, -0.3696, -0.8279,  0.5836, -0.3996,  0.1283, -2.0376,\n",
+      "          0.3862,  1.4711],\n",
+      "        [-1.1264,  1.9571, -0.6552,  0.8602,  1.0251, -0.9645, -0.3276,  2.1258,\n",
+      "         -0.6654,  0.0749],\n",
+      "        [-0.7010, -0.9812,  0.5490, -0.3314, -0.4605,  1.3265,  1.2659,  0.6560,\n",
+      "         -0.5652, -0.9509],\n",
+      "        [-0.0766,  1.1781, -1.0971, -0.6909,  0.0294,  0.7692, -0.9108, -1.3057,\n",
+      "         -0.6707,  0.2538],\n",
+      "        [ 0.8350,  0.1098,  0.7175,  0.9496,  0.6832,  1.7561,  0.8108, -0.2578,\n",
+      "         -0.1561,  0.3518],\n",
+      "        [ 0.2131,  0.2607, -0.4220, -0.0395, -1.2417, -0.2918,  0.8319, -1.5865,\n",
+      "         -0.6928, -1.0670],\n",
+      "        [-0.0291, -0.0646,  0.3013, -0.8483,  0.8989, -0.1266, -0.8799, -0.1870,\n",
+      "         -2.0869,  0.7021],\n",
+      "        [-0.9802,  0.8751,  0.7352,  0.7819, -0.6644,  0.2004, -1.5215, -0.0104,\n",
+      "          0.0355,  0.8969],\n",
+      "        [-0.1434,  1.6074,  0.7906,  0.2955,  0.2748,  0.4541,  0.5539, -1.4352,\n",
+      "         -1.1255, -0.1210]])\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,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 56,
    "id": "462666a2",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Files already downloaded and verified\n",
+      "Files already downloaded and verified\n"
+     ]
+    }
+   ],
    "source": [
     "import numpy as np\n",
     "from torchvision import datasets, transforms\n",
@@ -193,10 +272,27 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 60,
    "id": "317bf070",
-   "metadata": {},
-   "outputs": [],
+   "metadata": {
+    "scrolled": true
+   },
+   "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",
@@ -216,11 +312,17 @@
     "\n",
     "    def forward(self, x):\n",
     "        x = self.pool(F.relu(self.conv1(x)))\n",
+    "        print(x.shape)\n",
     "        x = self.pool(F.relu(self.conv2(x)))\n",
+    "        print(x.shape)\n",
     "        x = x.view(-1, 16 * 5 * 5)\n",
+    "        print(x.shape)\n",
     "        x = F.relu(self.fc1(x))\n",
+    "        print(x.shape)\n",
     "        x = F.relu(self.fc2(x))\n",
+    "        print(x.shape)\n",
     "        x = self.fc3(x)\n",
+    "        print(x.shape)\n",
     "        return x\n",
     "\n",
     "\n",
@@ -242,10 +344,1276 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 61,
    "id": "4b53f229",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n",
+      "torch.Size([20, 6, 14, 14])\n",
+      "torch.Size([20, 16, 5, 5])\n",
+      "torch.Size([20, 400])\n",
+      "torch.Size([20, 120])\n",
+      "torch.Size([20, 84])\n",
+      "torch.Size([20, 10])\n"
+     ]
+    },
+    {
+     "ename": "KeyboardInterrupt",
+     "evalue": "",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+      "\u001b[0;32m/var/folders/vx/zcsmnpmd3vd652pg3bvtyg0w0000gn/T/ipykernel_9529/2968749801.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     15\u001b[0m     \u001b[0;31m# Train the model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m     \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m     \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtrain_loader\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     18\u001b[0m         \u001b[0;31m# Move tensors to GPU if CUDA is available\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     19\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mtrain_on_gpu\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    628\u001b[0m                 \u001b[0;31m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    629\u001b[0m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# type: ignore[call-arg]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 630\u001b[0;31m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_next_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    631\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_num_yielded\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    632\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dataset_kind\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0m_DatasetKind\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIterable\u001b[0m \u001b[0;32mand\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_next_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    672\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_next_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    673\u001b[0m         \u001b[0mindex\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_next_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# may raise StopIteration\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 674\u001b[0;31m         \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dataset_fetcher\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfetch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# may raise StopIteration\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    675\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    676\u001b[0m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpin_memory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpin_memory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory_device\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py\u001b[0m in \u001b[0;36mfetch\u001b[0;34m(self, possibly_batched_index)\u001b[0m\n\u001b[1;32m     49\u001b[0m                 \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getitems__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     50\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 51\u001b[0;31m                 \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     52\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     53\u001b[0m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m     49\u001b[0m                 \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getitems__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     50\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 51\u001b[0;31m                 \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     52\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     53\u001b[0m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpossibly_batched_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torchvision/datasets/cifar.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, index)\u001b[0m\n\u001b[1;32m    113\u001b[0m         \u001b[0;31m# doing this so that it is consistent with all other datasets\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    114\u001b[0m         \u001b[0;31m# to return a PIL Image\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m         \u001b[0mimg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mImage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    117\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/PIL/Image.py\u001b[0m in \u001b[0;36mfromarray\u001b[0;34m(obj, mode)\u001b[0m\n\u001b[1;32m   2968\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mstrides\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2969\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"tobytes\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2970\u001b[0;31m             \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtobytes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2971\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2972\u001b[0m             \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtostring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+     ]
+    }
+   ],
    "source": [
     "import torch.optim as optim\n",
     "\n",
@@ -321,18 +1689,35 @@
    "id": "13e1df74",
    "metadata": {},
    "source": [
-    "Does overfit occur? If so, do an early stopping."
+    "Does overfit occur? If so, do an early stopping.\n",
+    "\n",
+    "We observe an overfitting since Epoch = 14"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 19,
    "id": "d39df818",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "import matplotlib.pyplot as plt\n",
     "\n",
+    "# Delet the overfitting \n",
+    "n_epochs = 15\n",
+    "train_loss_list = train_loss_list[:15]\n",
+    "\n",
     "plt.plot(range(n_epochs), train_loss_list)\n",
     "plt.xlabel(\"Epoch\")\n",
     "plt.ylabel(\"Loss\")\n",
@@ -350,10 +1735,23 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 52,
    "id": "e93efdfc",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "ename": "RuntimeError",
+     "evalue": "Error(s) in loading state_dict for Net:\n\tMissing key(s) in state_dict: \"conv3.weight\", \"conv3.bias\". \n\tsize mismatch for conv1.weight: copying a param with shape torch.Size([6, 3, 5, 5]) from checkpoint, the shape in current model is torch.Size([16, 3, 3, 3]).\n\tsize mismatch for conv1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([16]).\n\tsize mismatch for conv2.weight: copying a param with shape torch.Size([16, 6, 5, 5]) from checkpoint, the shape in current model is torch.Size([32, 16, 3, 3]).\n\tsize mismatch for conv2.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([32]).\n\tsize mismatch for fc1.weight: copying a param with shape torch.Size([120, 400]) from checkpoint, the shape in current model is torch.Size([512, 1024]).\n\tsize mismatch for fc1.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([512]).\n\tsize mismatch for fc2.weight: copying a param with shape torch.Size([84, 120]) from checkpoint, the shape in current model is torch.Size([64, 120]).\n\tsize mismatch for fc2.bias: copying a param with shape torch.Size([84]) from checkpoint, the shape in current model is torch.Size([64]).\n\tsize mismatch for fc3.weight: copying a param with shape torch.Size([10, 84]) from checkpoint, the shape in current model is torch.Size([10, 64]).",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
+      "\u001b[0;32m/var/folders/vx/zcsmnpmd3vd652pg3bvtyg0w0000gn/T/ipykernel_9529/3891591578.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_state_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./model_cifar.pt\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;31m# track test loss\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mtest_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mclass_correct\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.0\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36mload_state_dict\u001b[0;34m(self, state_dict, strict, assign)\u001b[0m\n\u001b[1;32m   2150\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2151\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror_msgs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2152\u001b[0;31m             raise RuntimeError('Error(s) in loading state_dict for {}:\\n\\t{}'.format(\n\u001b[0m\u001b[1;32m   2153\u001b[0m                                self.__class__.__name__, \"\\n\\t\".join(error_msgs)))\n\u001b[1;32m   2154\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0m_IncompatibleKeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmissing_keys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munexpected_keys\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;31mRuntimeError\u001b[0m: Error(s) in loading state_dict for Net:\n\tMissing key(s) in state_dict: \"conv3.weight\", \"conv3.bias\". \n\tsize mismatch for conv1.weight: copying a param with shape torch.Size([6, 3, 5, 5]) from checkpoint, the shape in current model is torch.Size([16, 3, 3, 3]).\n\tsize mismatch for conv1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([16]).\n\tsize mismatch for conv2.weight: copying a param with shape torch.Size([16, 6, 5, 5]) from checkpoint, the shape in current model is torch.Size([32, 16, 3, 3]).\n\tsize mismatch for conv2.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([32]).\n\tsize mismatch for fc1.weight: copying a param with shape torch.Size([120, 400]) from checkpoint, the shape in current model is torch.Size([512, 1024]).\n\tsize mismatch for fc1.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([512]).\n\tsize mismatch for fc2.weight: copying a param with shape torch.Size([84, 120]) from checkpoint, the shape in current model is torch.Size([64, 120]).\n\tsize mismatch for fc2.bias: copying a param with shape torch.Size([84]) from checkpoint, the shape in current model is torch.Size([64]).\n\tsize mismatch for fc3.weight: copying a param with shape torch.Size([10, 84]) from checkpoint, the shape in current model is torch.Size([10, 64])."
+     ]
+    }
+   ],
    "source": [
     "model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n",
     "\n",
@@ -434,6 +1832,333 @@
     "Compare the results obtained with this new network to those obtained previously."
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "id": "afd50344",
+   "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=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",
+    "\n",
+    "# define the CNN architecture\n",
+    "\n",
+    "\n",
+    "class Net(nn.Module):\n",
+    "    def __init__(self):\n",
+    "        super(Net, self).__init__()\n",
+    "        self.conv1 = nn.Conv2d(3, 16, 3)  # output 16 channels\n",
+    "        self.pool = nn.MaxPool2d(2, 2)\n",
+    "        self.conv2 = nn.Conv2d(16, 32, 3) # input 16 and output 32 channels\n",
+    "        self.conv3 = nn.Conv2d(32, 64, 3) # input 32 and output 64 channels\n",
+    "        self.fc1 = nn.Linear(64 * 2 * 2, 512) # output size of 512\n",
+    "        self.fc2 = nn.Linear(512, 64)         # output size of 64\n",
+    "        self.fc3 = nn.Linear(64, 10)          # output size of 10 classes\n",
+    "       \n",
+    "        self.dropout = nn.Dropout(0.4)\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 * 2 * 2)\n",
+    "        x = F.relu(self.fc1(x))\n",
+    "        x = self.dropout(x)\n",
+    "        x = F.relu(self.fc2(x))\n",
+    "        x = self.dropout(x)\n",
+    "        x = self.fc3(x)\n",
+    "        return x\n",
+    "\n",
+    "\n",
+    "# create a complete CNN\n",
+    "new_model = Net()\n",
+    "print(model)\n",
+    "# move tensors to GPU if CUDA is available\n",
+    "if train_on_gpu:\n",
+    "    new_model.cuda()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 72,
+   "id": "40b74cf8",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch: 0 \tTraining Loss: 45.726700 \tValidation Loss: 43.348712\n",
+      "Validation loss decreased (inf --> 43.348712).  Saving model ...\n",
+      "Epoch: 1 \tTraining Loss: 40.352325 \tValidation Loss: 36.572871\n",
+      "Validation loss decreased (43.348712 --> 36.572871).  Saving model ...\n",
+      "Epoch: 2 \tTraining Loss: 36.272828 \tValidation Loss: 33.547526\n",
+      "Validation loss decreased (36.572871 --> 33.547526).  Saving model ...\n",
+      "Epoch: 3 \tTraining Loss: 33.946008 \tValidation Loss: 31.209806\n",
+      "Validation loss decreased (33.547526 --> 31.209806).  Saving model ...\n",
+      "Epoch: 4 \tTraining Loss: 31.889910 \tValidation Loss: 29.128897\n",
+      "Validation loss decreased (31.209806 --> 29.128897).  Saving model ...\n",
+      "Epoch: 5 \tTraining Loss: 30.029890 \tValidation Loss: 27.697655\n",
+      "Validation loss decreased (29.128897 --> 27.697655).  Saving model ...\n",
+      "Epoch: 6 \tTraining Loss: 28.622629 \tValidation Loss: 26.432032\n",
+      "Validation loss decreased (27.697655 --> 26.432032).  Saving model ...\n",
+      "Epoch: 7 \tTraining Loss: 27.205110 \tValidation Loss: 25.298413\n",
+      "Validation loss decreased (26.432032 --> 25.298413).  Saving model ...\n",
+      "Epoch: 8 \tTraining Loss: 25.966662 \tValidation Loss: 24.126736\n",
+      "Validation loss decreased (25.298413 --> 24.126736).  Saving model ...\n",
+      "Epoch: 9 \tTraining Loss: 24.953256 \tValidation Loss: 23.669894\n",
+      "Validation loss decreased (24.126736 --> 23.669894).  Saving model ...\n",
+      "Epoch: 10 \tTraining Loss: 23.959076 \tValidation Loss: 22.569389\n",
+      "Validation loss decreased (23.669894 --> 22.569389).  Saving model ...\n",
+      "Epoch: 11 \tTraining Loss: 22.995271 \tValidation Loss: 22.283467\n",
+      "Validation loss decreased (22.569389 --> 22.283467).  Saving model ...\n",
+      "Epoch: 12 \tTraining Loss: 22.260409 \tValidation Loss: 22.338442\n",
+      "Epoch: 13 \tTraining Loss: 21.372561 \tValidation Loss: 21.444340\n",
+      "Validation loss decreased (22.283467 --> 21.444340).  Saving model ...\n",
+      "Epoch: 14 \tTraining Loss: 20.654840 \tValidation Loss: 20.312754\n",
+      "Validation loss decreased (21.444340 --> 20.312754).  Saving model ...\n",
+      "Epoch: 15 \tTraining Loss: 20.005367 \tValidation Loss: 19.429527\n",
+      "Validation loss decreased (20.312754 --> 19.429527).  Saving model ...\n",
+      "Epoch: 16 \tTraining Loss: 19.244492 \tValidation Loss: 19.130991\n",
+      "Validation loss decreased (19.429527 --> 19.130991).  Saving model ...\n",
+      "Epoch: 17 \tTraining Loss: 18.583056 \tValidation Loss: 19.104824\n",
+      "Validation loss decreased (19.130991 --> 19.104824).  Saving model ...\n",
+      "Epoch: 18 \tTraining Loss: 18.182487 \tValidation Loss: 18.528547\n",
+      "Validation loss decreased (19.104824 --> 18.528547).  Saving model ...\n",
+      "Epoch: 19 \tTraining Loss: 17.475429 \tValidation Loss: 19.013168\n",
+      "Epoch: 20 \tTraining Loss: 17.000069 \tValidation Loss: 18.464468\n",
+      "Validation loss decreased (18.528547 --> 18.464468).  Saving model ...\n",
+      "Epoch: 21 \tTraining Loss: 16.451763 \tValidation Loss: 17.770199\n",
+      "Validation loss decreased (18.464468 --> 17.770199).  Saving model ...\n",
+      "Epoch: 22 \tTraining Loss: 16.065195 \tValidation Loss: 17.761930\n",
+      "Validation loss decreased (17.770199 --> 17.761930).  Saving model ...\n",
+      "Epoch: 23 \tTraining Loss: 15.498746 \tValidation Loss: 17.700515\n",
+      "Validation loss decreased (17.761930 --> 17.700515).  Saving model ...\n",
+      "Epoch: 24 \tTraining Loss: 15.129404 \tValidation Loss: 17.791783\n",
+      "Epoch: 25 \tTraining Loss: 14.751069 \tValidation Loss: 17.500954\n",
+      "Validation loss decreased (17.700515 --> 17.500954).  Saving model ...\n",
+      "Epoch: 26 \tTraining Loss: 14.288809 \tValidation Loss: 17.845116\n",
+      "Epoch: 27 \tTraining Loss: 14.004680 \tValidation Loss: 18.243857\n",
+      "Epoch: 28 \tTraining Loss: 13.555525 \tValidation Loss: 17.641622\n",
+      "Epoch: 29 \tTraining Loss: 13.225682 \tValidation Loss: 17.438863\n",
+      "Validation loss decreased (17.500954 --> 17.438863).  Saving model ...\n"
+     ]
+    }
+   ],
+   "source": [
+    "import torch.optim as optim\n",
+    "\n",
+    "criterion = nn.CrossEntropyLoss()  # specify loss function\n",
+    "optimizer = optim.SGD(new_model.parameters(), lr=0.01)  # specify optimizer\n",
+    "\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",
+    "\n",
+    "for epoch in range(n_epochs):\n",
+    "    # Keep track of training and validation loss\n",
+    "    train_loss = 0.0\n",
+    "    valid_loss = 0.0\n",
+    "\n",
+    "    # Train the model\n",
+    "    new_model.train()\n",
+    "    for data, target in train_loader:\n",
+    "        # Move tensors to GPU if CUDA is available\n",
+    "        if train_on_gpu:\n",
+    "            data, target = data.cuda(), target.cuda()\n",
+    "        # Clear the gradients of all optimized variables\n",
+    "        optimizer.zero_grad()\n",
+    "        # Forward pass: compute predicted outputs by passing inputs to the model\n",
+    "        output = new_model(data)\n",
+    "        # Calculate the batch loss\n",
+    "        #print(output.shape, target.shape)  debubg\n",
+    "        loss = criterion(output, target)\n",
+    "        # Backward pass: compute gradient of the loss with respect to model parameters\n",
+    "        loss.backward()\n",
+    "        # Perform a single optimization step (parameter update)\n",
+    "        optimizer.step()\n",
+    "        # Update training loss\n",
+    "        train_loss += loss.item() * data.size(0)\n",
+    "\n",
+    "    # Validate the model\n",
+    "    new_model.eval()\n",
+    "    for data, target in valid_loader:\n",
+    "        # Move tensors to GPU if CUDA is available\n",
+    "        if train_on_gpu:\n",
+    "            data, target = data.cuda(), target.cuda()\n",
+    "        # Forward pass: compute predicted outputs by passing inputs to the model\n",
+    "        output = new_model(data)\n",
+    "        # Calculate the batch loss\n",
+    "        loss = criterion(output, target)\n",
+    "        # Update average validation loss\n",
+    "        valid_loss += loss.item() * data.size(0)\n",
+    "\n",
+    "    # Calculate average losses\n",
+    "    train_loss = train_loss / len(train_loader)\n",
+    "    valid_loss = valid_loss / len(valid_loader)\n",
+    "    train_loss_list.append(train_loss)\n",
+    "\n",
+    "    # Print training/validation statistics\n",
+    "    print(\n",
+    "        \"Epoch: {} \\tTraining Loss: {:.6f} \\tValidation Loss: {:.6f}\".format(\n",
+    "            epoch, train_loss, valid_loss\n",
+    "        )\n",
+    "    )\n",
+    "\n",
+    "    # Save model if validation loss has decreased\n",
+    "    if valid_loss <= valid_loss_min:\n",
+    "        print(\n",
+    "            \"Validation loss decreased ({:.6f} --> {:.6f}).  Saving model ...\".format(\n",
+    "                valid_loss_min, valid_loss\n",
+    "            )\n",
+    "        )\n",
+    "        torch.save(model.state_dict(), \"model_cifar.pt\")\n",
+    "        valid_loss_min = valid_loss"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 80,
+   "id": "d9f13442",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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\n",
+      "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",
+    "plt.xlabel(\"Epoch\")\n",
+    "plt.ylabel(\"Loss\")\n",
+    "plt.title(\"Performance of Model 1\")\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 82,
+   "id": "ea9fbfa6",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Test Loss: 17.497508\n",
+      "\n",
+      "Test Accuracy of airplane: 74% (747/1000)\n",
+      "Test Accuracy of automobile: 83% (839/1000)\n",
+      "Test Accuracy of  bird: 65% (654/1000)\n",
+      "Test Accuracy of   cat: 57% (574/1000)\n",
+      "Test Accuracy of  deer: 71% (717/1000)\n",
+      "Test Accuracy of   dog: 53% (534/1000)\n",
+      "Test Accuracy of  frog: 79% (790/1000)\n",
+      "Test Accuracy of horse: 65% (657/1000)\n",
+      "Test Accuracy of  ship: 80% (805/1000)\n",
+      "Test Accuracy of truck: 74% (746/1000)\n",
+      "\n",
+      "Test Accuracy (Overall): 70% (7063/10000)\n"
+     ]
+    }
+   ],
+   "source": [
+    "model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n",
+    "\n",
+    "# track test loss\n",
+    "test_loss = 0.0\n",
+    "class_correct = list(0.0 for i in range(10))\n",
+    "class_total = list(0.0 for i in range(10))\n",
+    "\n",
+    "new_model.eval()\n",
+    "# iterate over test data\n",
+    "for data, target in test_loader:\n",
+    "    # move tensors to GPU if CUDA is available\n",
+    "    if train_on_gpu:\n",
+    "        data, target = data.cuda(), target.cuda()\n",
+    "    # forward pass: compute predicted outputs by passing inputs to the model\n",
+    "    output = new_model(data)\n",
+    "    # calculate the batch loss\n",
+    "    loss = criterion(output, target)\n",
+    "    # update test loss\n",
+    "    test_loss += loss.item() * data.size(0)\n",
+    "    # convert output probabilities to predicted class\n",
+    "    _, pred = torch.max(output, 1)\n",
+    "    # compare predictions to true label\n",
+    "    correct_tensor = pred.eq(target.data.view_as(pred))\n",
+    "    correct = (\n",
+    "        np.squeeze(correct_tensor.numpy())\n",
+    "        if not train_on_gpu\n",
+    "        else np.squeeze(correct_tensor.cpu().numpy())\n",
+    "    )\n",
+    "    # calculate test accuracy for each object class\n",
+    "    for i in range(batch_size):\n",
+    "        label = target.data[i]\n",
+    "        class_correct[label] += correct[i].item()\n",
+    "        class_total[label] += 1\n",
+    "\n",
+    "# average test loss\n",
+    "test_loss = test_loss / len(test_loader)\n",
+    "print(\"Test Loss: {:.6f}\\n\".format(test_loss))\n",
+    "\n",
+    "for i in range(10):\n",
+    "    if class_total[i] > 0:\n",
+    "        print(\n",
+    "            \"Test Accuracy of %5s: %2d%% (%2d/%2d)\"\n",
+    "            % (\n",
+    "                classes[i],\n",
+    "                100 * class_correct[i] / class_total[i],\n",
+    "                np.sum(class_correct[i]),\n",
+    "                np.sum(class_total[i]),\n",
+    "            )\n",
+    "        )\n",
+    "    else:\n",
+    "        print(\"Test Accuracy of %5s: N/A (no training examples)\" % (classes[i]))\n",
+    "\n",
+    "print(\n",
+    "    \"\\nTest Accuracy (Overall): %2d%% (%2d/%2d)\"\n",
+    "    % (\n",
+    "        100.0 * np.sum(class_correct) / np.sum(class_total),\n",
+    "        np.sum(class_correct),\n",
+    "        np.sum(class_total),\n",
+    "    )\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f670c160",
+   "metadata": {},
+   "source": [
+    "Compare the results obtained with this new network to those obtained previously."
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "bc381cf4",
@@ -883,7 +2608,7 @@
   },
   {
    "cell_type": "markdown",
-   "id": "bbd48800",
+   "id": "cbf42fae",
    "metadata": {},
    "source": [
     "Experiments:\n",
@@ -926,7 +2651,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3.8.5 ('base')",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -940,7 +2665,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.5"
+   "version": "3.9.13"
   },
   "vscode": {
    "interpreter": {