diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb
index 6f8376354a7c4691443c77dcc931a102bcaf51dd..9c05bf6619ba538696fe2a73423dee5416f89bb7 100644
--- a/TD2 Deep Learning.ipynb	
+++ b/TD2 Deep Learning.ipynb	
@@ -41,72 +41,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Collecting torchNote: you may need to restart the kernel to use updated packages.\n",
-      "\n",
-      "  Downloading torch-2.1.0-cp311-cp311-win_amd64.whl (192.3 MB)\n",
-      "     -------------------------------------- 192.3/192.3 MB 2.7 MB/s eta 0:00:00\n",
-      "Collecting torchvision\n",
-      "  Downloading torchvision-0.16.0-cp311-cp311-win_amd64.whl (1.3 MB)\n",
-      "     ---------------------------------------- 1.3/1.3 MB 5.0 MB/s eta 0:00:00\n",
-      "Collecting filelock\n",
-      "  Downloading filelock-3.13.1-py3-none-any.whl (11 kB)\n",
-      "Collecting typing-extensions\n",
-      "  Downloading typing_extensions-4.8.0-py3-none-any.whl (31 kB)\n",
-      "Collecting sympy\n",
-      "  Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n",
-      "     ---------------------------------------- 5.7/5.7 MB 5.3 MB/s eta 0:00:00\n",
-      "Collecting networkx\n",
-      "  Downloading networkx-3.2.1-py3-none-any.whl (1.6 MB)\n",
-      "     ---------------------------------------- 1.6/1.6 MB 11.7 MB/s eta 0:00:00\n",
-      "Collecting jinja2\n",
-      "  Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n",
-      "Collecting fsspec\n",
-      "  Downloading fsspec-2023.10.0-py3-none-any.whl (166 kB)\n",
-      "     -------------------------------------- 166.4/166.4 kB 5.0 MB/s eta 0:00:00\n",
-      "Collecting numpy\n",
-      "  Downloading numpy-1.26.1-cp311-cp311-win_amd64.whl (15.8 MB)\n",
-      "     --------------------------------------- 15.8/15.8 MB 10.4 MB/s eta 0:00:00\n",
-      "Collecting requests\n",
-      "  Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n",
-      "     ---------------------------------------- 62.6/62.6 kB 3.3 MB/s eta 0:00:00\n",
-      "Collecting pillow!=8.3.*,>=5.3.0\n",
-      "  Downloading Pillow-10.1.0-cp311-cp311-win_amd64.whl (2.6 MB)\n",
-      "     ---------------------------------------- 2.6/2.6 MB 10.4 MB/s eta 0:00:00\n",
-      "Collecting MarkupSafe>=2.0\n",
-      "  Downloading MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl (17 kB)\n",
-      "Collecting charset-normalizer<4,>=2\n",
-      "  Downloading charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl (99 kB)\n",
-      "     ---------------------------------------- 99.9/99.9 kB ? eta 0:00:00\n",
-      "Collecting idna<4,>=2.5\n",
-      "  Using cached idna-3.4-py3-none-any.whl (61 kB)\n",
-      "Collecting urllib3<3,>=1.21.1\n",
-      "  Downloading urllib3-2.0.7-py3-none-any.whl (124 kB)\n",
-      "     -------------------------------------- 124.2/124.2 kB 7.1 MB/s eta 0:00:00\n",
-      "Collecting certifi>=2017.4.17\n",
-      "  Downloading certifi-2023.7.22-py3-none-any.whl (158 kB)\n",
-      "     -------------------------------------- 158.3/158.3 kB 9.3 MB/s eta 0:00:00\n",
-      "Collecting mpmath>=0.19\n",
-      "  Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n",
-      "     -------------------------------------- 536.2/536.2 kB 8.5 MB/s eta 0:00:00\n",
-      "Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, fsspec, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision\n",
-      "Successfully installed MarkupSafe-2.1.3 certifi-2023.7.22 charset-normalizer-3.3.2 filelock-3.13.1 fsspec-2023.10.0 idna-3.4 jinja2-3.1.2 mpmath-1.3.0 networkx-3.2.1 numpy-1.26.1 pillow-10.1.0 requests-2.31.0 sympy-1.12 torch-2.1.0 torchvision-0.16.0 typing-extensions-4.8.0 urllib3-2.0.7\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "  WARNING: The script isympy.exe is installed in 'c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Scripts' which is not on PATH.\n",
-      "  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n",
-      "  WARNING: The script f2py.exe is installed in 'c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Scripts' which is not on PATH.\n",
-      "  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n",
-      "  WARNING: The script normalizer.exe is installed in 'c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Scripts' which is not on PATH.\n",
-      "  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n",
-      "  WARNING: The scripts convert-caffe2-to-onnx.exe, convert-onnx-to-caffe2.exe and torchrun.exe are installed in 'c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Scripts' which is not on PATH.\n",
-      "  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n",
-      "\n",
-      "[notice] A new release of pip available: 22.3.1 -> 23.3.1\n",
-      "[notice] To update, run: python.exe -m pip install --upgrade pip\n"
+      "^C\n",
+      "Note: you may need to restart the kernel to use updated packages.\n"
      ]
     }
    ],
@@ -125,7 +61,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": null,
    "id": "b1950f0a",
    "metadata": {},
    "outputs": [
@@ -230,7 +166,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 39,
    "id": "6e18f2fd",
    "metadata": {},
    "outputs": [
@@ -264,7 +200,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 77,
    "id": "462666a2",
    "metadata": {},
    "outputs": [
@@ -346,7 +282,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 41,
    "id": "317bf070",
    "metadata": {},
    "outputs": [
@@ -410,7 +346,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 42,
    "id": "4b53f229",
    "metadata": {},
    "outputs": [
@@ -418,19 +354,23 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Epoch: 0 \tTraining Loss: 43.510036 \tValidation Loss: 38.716658\n",
-      "Validation loss decreased (inf --> 38.716658).  Saving model ...\n",
-      "Epoch: 1 \tTraining Loss: 34.671364 \tValidation Loss: 32.908172\n",
-      "Validation loss decreased (38.716658 --> 32.908172).  Saving model ...\n",
-      "Epoch: 2 \tTraining Loss: 30.863744 \tValidation Loss: 30.061812\n",
-      "Validation loss decreased (32.908172 --> 30.061812).  Saving model ...\n",
-      "Epoch: 3 \tTraining Loss: 28.601537 \tValidation Loss: 28.042152\n",
-      "Validation loss decreased (30.061812 --> 28.042152).  Saving model ...\n",
-      "Epoch: 4 \tTraining Loss: 26.827271 \tValidation Loss: 26.673805\n",
-      "Validation loss decreased (28.042152 --> 26.673805).  Saving model ...\n",
-      "Epoch: 5 \tTraining Loss: 25.389162 \tValidation Loss: 25.631746\n",
-      "Validation loss decreased (26.673805 --> 25.631746).  Saving model ...\n",
-      "Epoch: 6 \tTraining Loss: 24.229274 \tValidation Loss: 25.648020\n"
+      "Epoch: 0 \tTraining Loss: 43.985662 \tValidation Loss: 38.691828\n",
+      "Validation loss decreased (inf --> 38.691828).  Saving model ...\n",
+      "Epoch: 1 \tTraining Loss: 34.737945 \tValidation Loss: 32.245164\n",
+      "Validation loss decreased (38.691828 --> 32.245164).  Saving model ...\n",
+      "Epoch: 2 \tTraining Loss: 30.932543 \tValidation Loss: 29.559662\n",
+      "Validation loss decreased (32.245164 --> 29.559662).  Saving model ...\n",
+      "Epoch: 3 \tTraining Loss: 28.841259 \tValidation Loss: 28.510968\n",
+      "Validation loss decreased (29.559662 --> 28.510968).  Saving model ...\n",
+      "Epoch: 4 \tTraining Loss: 27.152388 \tValidation Loss: 26.944222\n",
+      "Validation loss decreased (28.510968 --> 26.944222).  Saving model ...\n",
+      "Epoch: 5 \tTraining Loss: 25.761013 \tValidation Loss: 26.533953\n",
+      "Validation loss decreased (26.944222 --> 26.533953).  Saving model ...\n",
+      "Epoch: 6 \tTraining Loss: 24.576015 \tValidation Loss: 26.304483\n",
+      "Validation loss decreased (26.533953 --> 26.304483).  Saving model ...\n",
+      "Epoch: 7 \tTraining Loss: 23.546151 \tValidation Loss: 24.197494\n",
+      "Validation loss decreased (26.304483 --> 24.197494).  Saving model ...\n",
+      "Epoch: 8 \tTraining Loss: 22.601423 \tValidation Loss: 25.205635\n"
      ]
     }
    ],
@@ -526,65 +466,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Collecting matplotlibNote: you may need to restart the kernel to use updated packages.\n",
-      "\n",
-      "  Downloading matplotlib-3.8.1-cp311-cp311-win_amd64.whl (7.6 MB)\n",
-      "     ---------------------------------------- 7.6/7.6 MB 9.2 MB/s eta 0:00:00\n",
-      "Collecting contourpy>=1.0.1\n",
-      "  Downloading contourpy-1.2.0-cp311-cp311-win_amd64.whl (187 kB)\n",
-      "     -------------------------------------- 187.6/187.6 kB 5.5 MB/s eta 0:00:00\n",
-      "Collecting cycler>=0.10\n",
-      "  Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n",
-      "Collecting fonttools>=4.22.0\n",
-      "  Downloading fonttools-4.44.0-cp311-cp311-win_amd64.whl (2.1 MB)\n",
-      "     ---------------------------------------- 2.1/2.1 MB 15.3 MB/s eta 0:00:00\n",
-      "Collecting kiwisolver>=1.3.1\n",
-      "  Downloading kiwisolver-1.4.5-cp311-cp311-win_amd64.whl (56 kB)\n",
-      "     ---------------------------------------- 56.1/56.1 kB ? eta 0:00:00\n",
-      "Requirement already satisfied: numpy<2,>=1.21 in c:\\users\\oscar\\appdata\\local\\programs\\python\\python311\\lib\\site-packages (from matplotlib) (1.26.1)\n",
-      "Requirement already satisfied: packaging>=20.0 in c:\\users\\oscar\\appdata\\roaming\\python\\python311\\site-packages (from matplotlib) (23.2)\n",
-      "Requirement already satisfied: pillow>=8 in c:\\users\\oscar\\appdata\\local\\programs\\python\\python311\\lib\\site-packages (from matplotlib) (10.1.0)\n",
-      "Collecting pyparsing>=2.3.1\n",
-      "  Downloading pyparsing-3.1.1-py3-none-any.whl (103 kB)\n",
-      "     ---------------------------------------- 103.1/103.1 kB ? eta 0:00:00\n",
-      "Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\oscar\\appdata\\roaming\\python\\python311\\site-packages (from matplotlib) (2.8.2)\n",
-      "Requirement already satisfied: six>=1.5 in c:\\users\\oscar\\appdata\\roaming\\python\\python311\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
-      "Installing collected packages: pyparsing, kiwisolver, fonttools, cycler, contourpy, matplotlib\n",
-      "Successfully installed contourpy-1.2.0 cycler-0.12.1 fonttools-4.44.0 kiwisolver-1.4.5 matplotlib-3.8.1 pyparsing-3.1.1\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "  WARNING: The scripts fonttools.exe, pyftmerge.exe, pyftsubset.exe and ttx.exe are installed in 'c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Scripts' which is not on PATH.\n",
-      "  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n",
-      "\n",
-      "[notice] A new release of pip available: 22.3.1 -> 23.3.1\n",
-      "[notice] To update, run: python.exe -m pip install --upgrade pip\n"
-     ]
-    }
-   ],
-   "source": [
-    "pip install matplotlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 43,
    "id": "d39df818",
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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jKioKNU6pVKJqKgojjegJyYIAubPn4/IyEgcPHgQnp6eYpekc5RKJcrLy8UuQ6sMGDAASUlJSExMVC2dO3fGpEmTkJiYCAMDA7FL1GolJSVITU2Fs7Oz2KVonR49etR6HMeVK1fg7u7e5LXwtlcTefXVVzF16lR07twZXbt2xeeff47S0lJMnz5d7NK0TklJidq/mq5fv47ExETY2NigdevWIlamXebNm4ft27fjl19+gaWlpWr8mLW1NUxNTUWuTvssWbIEQ4YMQevWrVFcXIzt27cjOjoa+/fvF7s0rWJpaVlr3Ji5uTlsbW05nqwOixcvxrBhw+Du7o6srCwsW7YMBgYGmDBhgtilaZ1XXnkF3bt3x0cffYRx48bhxIkTWL9+PdavX9/0xYg93UyfrF69WmjdurVgbGwsdO3aVYiLixO7JK106NAhAUCtZerUqWKXplXqukYAhE2bNoldmlZ6/vnnBXd3d8HY2Fiwt7cXBgwYIPz5559il6UTONX9wf79738Lzs7OgrGxsdCqVSvh3//+t5CSkiJ2WVrr119/FQICAgSZTCb4+/sL69evF6UOiSAIQtNHLiIiIiJxcMwPERER6RWGHyIiItIrDD9ERESkVxh+iIiISK8w/BAREZFeYfghIiIivcLwQ0RERHqF4YeIqB4kEgl2794tdhlE1AAYfohI602bNg0SiaTWEhYWJnZpRKSD+G4vItIJYWFh2LRpk9o6mUwmUjVEpMvY80NEOkEmk8HJyUltadmyJYCaW1IREREYMmQITE1N4eXlhV27dqkdn5SUhP79+8PU1BS2traYNWsWSkpK1Pb55ptv0L59e8hkMjg7O2P+/Plq2wsKCjBq1CiYmZnB19cXe/bsadyTJqJGwfBDRM3CO++8gzFjxuDs2bOYNGkSxo8fj0uXLgEASktLMXjwYLRs2RInT57Ezp07ceDAAbVwExERgXnz5mHWrFlISkrCnj174OPjo/Ydy5cvx7hx43Du3Dk888wzmDRpEm7dutWk50lEDUCU16kSET2GqVOnCgYGBoK5ubna8uGHHwqCUPOG+9mzZ6sdExISIsyZM0cQBEFYv3690LJlS6GkpES1/ffffxekUqmQk5MjCIIguLi4CG+99dYDawAgvP3226rPJSUlAgBh7969DXaeRNQ0OOaHiHRCv379EBERobbOxsZG9efQ0FC1baGhoUhMTAQAXLp0CUFBQTA3N1dt79GjB5RKJZKTkyGRSJCVlYUBAwY8tIbAwEDVn83NzWFlZYW8vLwnPSUiEgnDDxHpBHNz81q3oRqKqalpvfYzMjJS+yyRSKBUKhujJCJqRBzzQ0TNQlxcXK3Pbdu2BQC0bdsWZ8+eRWlpqWr7sWPHIJVK4efnB0tLS3h4eCAqKqpJayYicbDnh4h0Qnl5OXJyctTWGRoaws7ODgCwc+dOdO7cGT179sS2bdtw4sQJbNy4EQAwadIkLFu2DFOnTsW7776L/Px8LFiwAM899xwcHR0BAO+++y5mz54NBwcHDBkyBMXFxTh27BgWLFjQtCdKRI2O4YeIdMK+ffvg7Oysts7Pzw+XL18GUDMTa8eOHZg7dy6cnZ3x/fffo127dgAAMzMz7N+/Hy+//DK6dOkCMzMzjBkzBp999pmqralTp6KsrAwrV67E4sWLYWdnh7FjxzbdCRJRk5EIgiCIXQQRkSYkEgkiIyMxcuRIsUshIh3AMT9ERESkVxh+iIiISK9wzA8R6TzevSeix8GeHyIiItIrDD9ERESkVxh+iIiISK8w/BAREZFeYfghIiIivcLwQ0RERHqF4YeIiIj0CsMPERER6RWGHyIiItIr/w/kwamERFVHeQAAAABJRU5ErkJggg==",
+      "image/png": "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58696228J598EtbW1liyZAleffVV2NjYYPTo0fjoo49abCxLA6lUim3btuGdd97B+vXrsXr1agQEBODjjz/WzkBr8O2338LV1RU//fQTtmzZgoEDB+K33367aUyQu7s74uPj8e6772Lz5s343//+B2dnZ4SFheGjjz5qVM5vvvkGBw4c0H68b98+7S3EPn36sMiQaCTC/Y6yIyIiImolOEaGiIiIDBaLDBERERksFhkiIiIyWCwyREREZLBaTZFZsmQJJBKJzr4h/fv3h0Qi0XnMnj1bvJBERETUqrSK6dcJCQlYuXLlLZfNfuqpp/Duu+9qP7a2tm7JaERERNSKiV5kysvLMXnyZHz11VfaxZVuZG1tDQ8Pj0afX61W49q1a7Czs7vvpcyJiIhIHIIgoKysDF5eXtqNeG9F9CIzZ84cDB8+HIMHD75lkfnpp5/w448/wsPDAyNGjMDbb799x6sySqVSZ9nx7OxsdOzYsVmyExERUfPKzMzULoZ5K6IWmXXr1uH48eNISEi45fOPP/44/P394eXlhVOnTuHVV19FamoqNm/efNtzLl68WLt66o0yMzNhb2+vt+xERETUfEpLS+Hr66uzmeqtiLayb2ZmJqKjo7Fr1y7t2Jj+/fujc+fON22C1mDv3r0YNGgQ0tLStPuP/NM/r8g0fCMUCgWLDBERkYEoLS2Fg4PDXX9/i3ZFJikpCfn5+ejatav2mEqlwsGDB7Fs2TIolUrtzroNevToAQB3LDJyuRxyubz5ghMREVGrIVqRGTRoEFJSUnSOTZ8+HaGhoXj11VdvKjEAkJycDADw9PRsiYhERETUyolWZOzs7BAeHq5zzMbGBs7OzggPD0d6ejrWrl2LYcOGwdnZGadOncL8+fPRt2/fW07TJiIiItMj+qyl27GwsMDu3bvx6aefoqKiAr6+vhg7dizeeustsaMRERFRKyHaYN+Wcq+DhYiIiKj1uNff361miwIiIiKi+8UiQ0RERAaLRYaIiIgMFosMERERGSwWGSIiIjJYLDJERERksFhkiIiIyGCxyDSSWi3gSFohVGqjXoaHiIioVWORaQRBEDDyy0N4/Ou/cCitUOw4REREJotFphEkEgmi/Z0AABsSMkVOQ0REZLpYZBppfLQvAOCPs7korqgROQ0REZFpYpFppI5e9ujk7YBalYDNx7PEjkNERGSS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",
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -613,7 +501,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 44,
    "id": "e93efdfc",
    "metadata": {},
    "outputs": [
@@ -621,20 +509,20 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Test Loss: 17.796960\n",
+      "Test Loss: 23.820829\n",
       "\n",
-      "Test Accuracy of airplane: 80% (802/1000)\n",
-      "Test Accuracy of automobile: 86% (860/1000)\n",
-      "Test Accuracy of  bird: 71% (713/1000)\n",
-      "Test Accuracy of   cat: 44% (445/1000)\n",
-      "Test Accuracy of  deer: 51% (510/1000)\n",
-      "Test Accuracy of   dog: 57% (570/1000)\n",
-      "Test Accuracy of  frog: 84% (841/1000)\n",
-      "Test Accuracy of horse: 73% (734/1000)\n",
-      "Test Accuracy of  ship: 74% (746/1000)\n",
-      "Test Accuracy of truck: 72% (723/1000)\n",
+      "Test Accuracy of airplane: 61% (610/1000)\n",
+      "Test Accuracy of automobile: 84% (849/1000)\n",
+      "Test Accuracy of  bird: 42% (423/1000)\n",
+      "Test Accuracy of   cat: 32% (322/1000)\n",
+      "Test Accuracy of  deer: 42% (420/1000)\n",
+      "Test Accuracy of   dog: 45% (452/1000)\n",
+      "Test Accuracy of  frog: 75% (759/1000)\n",
+      "Test Accuracy of horse: 72% (729/1000)\n",
+      "Test Accuracy of  ship: 67% (679/1000)\n",
+      "Test Accuracy of truck: 55% (551/1000)\n",
       "\n",
-      "Test Accuracy (Overall): 69% (6944/10000)\n"
+      "Test Accuracy (Overall): 57% (5794/10000)\n"
      ]
     }
    ],
@@ -727,7 +615,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 45,
    "metadata": {},
    "outputs": [
     {
@@ -793,28 +681,40 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 46,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Epoch: 0 \tTraining Loss: 42.795537 \tValidation Loss: 39.038977\n",
-      "Validation loss decreased (inf --> 39.038977).  Saving model ...\n",
-      "Epoch: 1 \tTraining Loss: 34.554617 \tValidation Loss: 30.783826\n",
-      "Validation loss decreased (39.038977 --> 30.783826).  Saving model ...\n",
-      "Epoch: 2 \tTraining Loss: 29.657406 \tValidation Loss: 30.514103\n",
-      "Validation loss decreased (30.783826 --> 30.514103).  Saving model ...\n",
-      "Epoch: 3 \tTraining Loss: 27.002738 \tValidation Loss: 26.563254\n",
-      "Validation loss decreased (30.514103 --> 26.563254).  Saving model ...\n",
-      "Epoch: 4 \tTraining Loss: 24.674237 \tValidation Loss: 24.094015\n",
-      "Validation loss decreased (26.563254 --> 24.094015).  Saving model ...\n",
-      "Epoch: 5 \tTraining Loss: 22.514521 \tValidation Loss: 23.047831\n",
-      "Validation loss decreased (24.094015 --> 23.047831).  Saving model ...\n",
-      "Epoch: 6 \tTraining Loss: 20.536417 \tValidation Loss: 20.788202\n",
-      "Validation loss decreased (23.047831 --> 20.788202).  Saving model ...\n",
-      "Epoch: 7 \tTraining Loss: 18.854244 \tValidation Loss: 21.145039\n"
+      "Epoch: 0 \tTraining Loss: 44.312457 \tValidation Loss: 40.273668\n",
+      "Validation loss decreased (inf --> 40.273668).  Saving model ...\n",
+      "Epoch: 1 \tTraining Loss: 36.289314 \tValidation Loss: 32.158548\n",
+      "Validation loss decreased (40.273668 --> 32.158548).  Saving model ...\n",
+      "Epoch: 2 \tTraining Loss: 30.851595 \tValidation Loss: 28.817860\n",
+      "Validation loss decreased (32.158548 --> 28.817860).  Saving model ...\n",
+      "Epoch: 3 \tTraining Loss: 27.730793 \tValidation Loss: 27.938577\n",
+      "Validation loss decreased (28.817860 --> 27.938577).  Saving model ...\n",
+      "Epoch: 4 \tTraining Loss: 25.182311 \tValidation Loss: 25.716466\n",
+      "Validation loss decreased (27.938577 --> 25.716466).  Saving model ...\n",
+      "Epoch: 5 \tTraining Loss: 22.998916 \tValidation Loss: 22.586595\n",
+      "Validation loss decreased (25.716466 --> 22.586595).  Saving model ...\n",
+      "Epoch: 6 \tTraining Loss: 21.008817 \tValidation Loss: 22.228286\n",
+      "Validation loss decreased (22.586595 --> 22.228286).  Saving model ...\n",
+      "Epoch: 7 \tTraining Loss: 19.318290 \tValidation Loss: 20.138872\n",
+      "Validation loss decreased (22.228286 --> 20.138872).  Saving model ...\n",
+      "Epoch: 8 \tTraining Loss: 17.760859 \tValidation Loss: 19.191882\n",
+      "Validation loss decreased (20.138872 --> 19.191882).  Saving model ...\n",
+      "Epoch: 9 \tTraining Loss: 16.270090 \tValidation Loss: 18.723222\n",
+      "Validation loss decreased (19.191882 --> 18.723222).  Saving model ...\n",
+      "Epoch: 10 \tTraining Loss: 14.886328 \tValidation Loss: 18.159567\n",
+      "Validation loss decreased (18.723222 --> 18.159567).  Saving model ...\n",
+      "Epoch: 11 \tTraining Loss: 13.544485 \tValidation Loss: 17.597254\n",
+      "Validation loss decreased (18.159567 --> 17.597254).  Saving model ...\n",
+      "Epoch: 12 \tTraining Loss: 12.293319 \tValidation Loss: 17.118693\n",
+      "Validation loss decreased (17.597254 --> 17.118693).  Saving model ...\n",
+      "Epoch: 13 \tTraining Loss: 10.956016 \tValidation Loss: 17.155066\n"
      ]
     }
    ],
@@ -901,12 +801,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 49,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABnp0lEQVR4nO3dd3gU5d7G8e+m94SWhEAIhBaK9BbpRaoURVEUBFERBCyAryIKNgR7F0ERRMAuTZoKSBOk995DCaGlECBt5/1jQmIOHZJMNrk/17XXSZ6Znf3twmFv52k2wzAMRERERByQk9UFiIiIiNwqBRkRERFxWAoyIiIi4rAUZERERMRhKciIiIiIw1KQEREREYelICMiIiIOS0FGREREHJaCjIiIiDgsBRkRB/Huu+8SHh6Os7MzNWrUsLqcAmP+/PnUqFEDDw8PbDYbsbGxVpd0GZvNxquvvnrTzzt48CA2m41JkyZle00iuUVBRuQWTZo0CZvNlvHw8PCgQoUKDBw4kBMnTmTra/3xxx/83//9Hw0bNmTixIm89dZb2Xp9ubLTp0/TrVs3PD09+fzzz/nuu+/w9va+4rn//fuwfPnyy44bhkFoaCg2m4277747p0vPdqNGjaJTp04EBQXdcnASyQkuVhcg4uhef/11ypQpw8WLF1m+fDljx45l7ty5bN26FS8vr2x5jUWLFuHk5MSECRNwc3PLlmvK9a1Zs4aEhATeeOMNWrVqdUPP8fDwYNq0aTRq1ChL+5IlSzhy5Aju7u45UWqOe/nllwkODqZmzZosWLDA6nJEMuiOjMhtateuHT169ODxxx9n0qRJPPvssxw4cICZM2fe9rXPnz8PQExMDJ6entkWYgzD4MKFC9lyrfwsJiYGgICAgBt+Tvv27fn5559JTU3N0j5t2jRq165NcHBwdpaYaw4cOMDx48eZMmWK1aWIZKEgI5LNWrRoAZj/8F8yZcoUateujaenJ4ULF+bBBx8kKioqy/OaNWtG1apVWbduHU2aNMHLy4uXXnoJm83GxIkTSUxMzOi6uDSmITU1lTfeeIOyZcvi7u5O6dKleemll0hKSspy7dKlS3P33XezYMEC6tSpg6enJ+PGjePvv//GZrPx008/8dprr1GiRAl8fX257777iIuLIykpiWeffZbAwEB8fHx49NFHL7v2xIkTadGiBYGBgbi7u1O5cmXGjh172edyqYbly5dTr149PDw8CA8PZ/LkyZedGxsby3PPPUfp0qVxd3enZMmSPPLII5w6dSrjnKSkJEaOHEm5cuVwd3cnNDSU//u//7usvqv5+eefM/5MihYtSo8ePTh69GiWP49evXoBULduXWw2G717977udbt3787p06f5888/M9qSk5P55ZdfeOihh674nMTERIYMGUJoaCju7u5UrFiR9957D8MwspyXlJTEc889R7FixfD19aVTp04cOXLkitc8evQoffr0ISgoCHd3d6pUqcI333xz3fqvpnTp0rf8XJGcpK4lkWy2b98+AIoUKQKYYwteeeUVunXrxuOPP87Jkyf59NNPadKkCRs2bMjyX/unT5+mXbt2PPjgg/To0YOgoCDq1KnD+PHjWb16NV9//TUAd955JwCPP/443377Lffddx9Dhgzh33//ZfTo0ezYsYPp06dnqWvXrl10796dJ598kieeeIKKFStmHBs9ejSenp68+OKL7N27l08//RRXV1ecnJw4e/Ysr776KqtWrWLSpEmUKVOGESNGZDx37NixVKlShU6dOuHi4sLs2bN56qmnsNvtDBgwIEsNe/fu5b777uOxxx6jV69efPPNN/Tu3ZvatWtTpUoVAM6dO0fjxo3ZsWMHffr0oVatWpw6dYpZs2Zx5MgRihYtit1up1OnTixfvpy+fftSqVIltmzZwocffsju3buZMWPGNf+MJk2axKOPPkrdunUZPXo0J06c4OOPP2bFihUZfybDhw+nYsWKjB8/PqP7sGzZstf98y9dujSRkZF8//33tGvXDoB58+YRFxfHgw8+yCeffJLlfMMw6NSpE4sXL+axxx6jRo0aLFiwgOeff56jR4/y4YcfZpz7+OOPM2XKFB566CHuvPNOFi1aRIcOHS6r4cSJEzRo0ACbzcbAgQMpVqwY8+bN47HHHiM+Pp5nn332uu9DxGEYInJLJk6caADGX3/9ZZw8edKIiooyfvjhB6NIkSKGp6enceTIEePgwYOGs7OzMWrUqCzP3bJli+Hi4pKlvWnTpgZgfPnll5e9Vq9evQxvb+8sbRs3bjQA4/HHH8/SPnToUAMwFi1alNEWFhZmAMb8+fOznLt48WIDMKpWrWokJydntHfv3t2w2WxGu3btspwfGRlphIWFZWk7f/78ZfW2adPGCA8Pz9J2qYalS5dmtMXExBju7u7GkCFDMtpGjBhhAMZvv/122XXtdrthGIbx3XffGU5OTsayZcuyHP/yyy8NwFixYsVlz70kOTnZCAwMNKpWrWpcuHAho/333383AGPEiBEZbZf+jNesWXPV613p3M8++8zw9fXN+Gzuv/9+o3nz5hmfQ4cOHTKeN2PGDAMw3nzzzSzXu++++wybzWbs3bvXMIzMP++nnnoqy3kPPfSQARgjR47MaHvssceM4sWLG6dOncpy7oMPPmj4+/tn1HXgwAEDMCZOnHjd93fJyZMnL3s9ESupa0nkNrVq1YpixYoRGhrKgw8+iI+PD9OnT6dEiRL89ttv2O12unXrxqlTpzIewcHBlC9fnsWLF2e5lru7O48++ugNve7cuXMBGDx4cJb2IUOGADBnzpws7WXKlKFNmzZXvNYjjzyCq6trxu/169fHMAz69OmT5bz69esTFRWVZfyHp6dnxs9xcXGcOnWKpk2bsn//fuLi4rI8v3LlyjRu3Djj92LFilGxYkX279+f0fbrr79SvXp17rnnnsvqtNlsgNktVKlSJSIiIrJ8rpe69f73c/2vtWvXEhMTw1NPPYWHh0dGe4cOHYiIiLjsc7sV3bp148KFC/z+++8kJCTw+++/X7Vbae7cuTg7O/P0009naR8yZAiGYTBv3ryM84DLzvvfuyuGYfDrr7/SsWNHDMPI8vm0adOGuLg41q9ff9vvUSSvUNeSyG36/PPPqVChAi4uLgQFBVGxYkWcnMz/RtizZw+GYVC+fPkrPve/4QGgRIkSNzyg99ChQzg5OVGuXLks7cHBwQQEBHDo0KEs7WXKlLnqtUqVKpXld39/fwBCQ0Mva7fb7cTFxWV0na1YsYKRI0eycuXKjMHJl8TFxWVc60qvA1CoUCHOnj2b8fu+ffvo2rXrVWsF83PdsWMHxYoVu+LxS4N0r+TS5/LfrrVLIiIirjh1+mYVK1aMVq1aMW3aNM6fP09aWhr33XffVesJCQnB19c3S3ulSpWy1Hvpz/t/u7f+932cPHmS2NhYxo8fz/jx46/4mtf6fEQcjYKMyG2qV68ederUueIxu92OzWZj3rx5ODs7X3bcx8cny+//vbtxoy7dpbiea137SrVdq91IH4S6b98+WrZsSUREBB988AGhoaG4ubkxd+5cPvzwQ+x2+01d70bZ7XbuuOMOPvjggyse/98AZoWHHnqIJ554gujoaNq1a3dTM59ux6XPvEePHhmDlf9XtWrVcqUWkdygICOSg8qWLYthGJQpU4YKFSpk67XDwsKw2+3s2bMn47/ewRzoGRsbS1hYWLa+3pXMnj2bpKQkZs2aleVuy7W6dq6nbNmybN269brnbNq0iZYtW95wkLvk0ueya9eujK6oS3bt2pVtn9s999zDk08+yapVq/jxxx+vWc9ff/1FQkJClrsyO3fuzFLvpT/vffv2ZbkLs2vXrizXuzSjKS0t7YbXvhFxZBojI5KD7r33XpydnXnttdcuu+tgGAanT5++5Wu3b98egI8++ihL+6W7FFeazZLdLt1h+e97i4uLY+LEibd8za5du7Jp06bLZl3993W6devG0aNH+eqrry4758KFCyQmJl71+nXq1CEwMJAvv/wyy1TtefPmsWPHjmz73Hx8fBg7diyvvvoqHTt2vOp57du3Jy0tjc8++yxL+4cffojNZsuY+XTpf/931tP//vk7OzvTtWtXfv311ysGwpMnT97K2xHJs3RHRiQHlS1bljfffJNhw4Zx8OBBunTpgq+vLwcOHGD69On07duXoUOH3tK1q1evTq9evRg/fjyxsbE0bdqU1atX8+2339KlSxeaN2+eze/mcq1bt8bNzY2OHTvy5JNPcu7cOb766isCAwM5fvz4LV3z+eef55dffuH++++nT58+1K5dmzNnzjBr1iy+/PJLqlevTs+ePfnpp5/o168fixcvpmHDhqSlpbFz505++umnjPVyrsTV1ZW3336bRx99lKZNm9K9e/eM6delS5fmueeeu52PJIurde38V8eOHWnevDnDhw/n4MGDVK9enT/++IOZM2fy7LPPZoyJqVGjBt27d+eLL74gLi6OO++8k4ULF7J3797LrjlmzBgWL15M/fr1eeKJJ6hcuTJnzpxh/fr1/PXXX5w5c+am38t3333HoUOHMsZBLV26lDfffBOAnj175sodQJErUZARyWEvvvgiFSpU4MMPP+S1114DzDEcrVu3plOnTrd17a+//prw8HAmTZrE9OnTCQ4OZtiwYYwcOTI7Sr+uihUr8ssvv/Dyyy8zdOhQgoOD6d+/P8WKFbtsxtON8vHxYdmyZYwcOZLp06fz7bffEhgYSMuWLSlZsiQATk5OzJgxgw8//JDJkyczffp0vLy8CA8P55lnnrluN17v3r3x8vJizJgxvPDCC3h7e3PPPffw9ttv59pYlkucnJyYNWsWI0aM4Mcff2TixImULl2ad999N2MG2iXffPMNxYoVY+rUqcyYMYMWLVowZ86cy8YEBQUFsXr1al5//XV+++03vvjiC4oUKUKVKlV4++23b6nOCRMmsGTJkozfFy9enNGF2KhRIwUZsYzNuNlRdiIiIiJ5hMbIiIiIiMNSkBERERGHpSAjIiIiDktBRkRERByWgoyIiIg4LAUZERERcVj5fh0Zu93OsWPH8PX1vemlzEVERMQahmGQkJBASEhIxka8V5Lvg8yxY8fyxAZyIiIicvOioqIyFsO8knwfZC5twhYVFYWfn5/F1YiIiMiNiI+PJzQ0NMtmqleS74PMpe4kPz8/BRkREREHc71hIRrsKyIiIg5LQUZEREQcloKMiIiIOKx8P0ZGRETkdqSlpZGSkmJ1GfmOq6srzs7Ot30dBRkREZErMAyD6OhoYmNjrS4l3woICCA4OPi21nlTkBEREbmCSyEmMDAQLy8vLaqajQzD4Pz588TExABQvHjxW76WgoyIiMj/SEtLywgxRYoUsbqcfMnT0xOAmJgYAgMDb7mbSYN9RURE/selMTFeXl4WV5K/Xfp8b2cMkoKMiIjIVag7KWdlx+erICMiIiIOS0FGREREHJaCjIiISD4UHR3NoEGDCA8Px93dndDQUDp27MjChQsBKF26NDabjVWrVmV53rPPPkuzZs0yfn/11Vex2Wz069cvy3kbN27EZrNx8OBBADZt2kT37t0JDQ3F09OTSpUq8fHHH+foewQFmVtnt8P8+WAYVlciIiKSxcGDB6lduzaLFi3i3XffZcuWLcyfP5/mzZszYMCAjPM8PDx44YUXrns9Dw8PJkyYwJ49e656zrp16wgMDGTKlCls27aN4cOHM2zYMD777LNseU9Xo+nXtyItDe68E1avNsNMmzZWVyQiIpLhqaeewmazsXr1ary9vTPaq1SpQp8+fTJ+79u3L19++SVz586lffv2V71exYoVCQwMZPjw4fz0009XPOe/1wUIDw9n5cqV/PbbbwwcOPA239HV6Y7MrXB2hoYNzZ9ffNG8OyMiIvmaYRicT0615GHcxN3/M2fOMH/+fAYMGJAlxFwSEBCQ8XOZMmXo168fw4YNw36d77IxY8bw66+/snbt2huuJS4ujsKFC9/w+bdCd2Ru1UsvwYQJsHEj/PgjdO9udUUiIpKDLqSkUXnEAktee/vrbfByu7Gv7L1792IYBhERETd0/ssvv8zEiROZOnUqPXv2vOp5tWrVolu3brzwwgsZ42yu5Z9//uHHH39kzpw5N1THrdIdmVtVtCg8/7z588svQ3KytfWIiIjATd29AShWrBhDhw5lxIgRJF/nu+zNN99k2bJl/PHHH9c8b+vWrXTu3JmRI0fSunXrm6rnZumOzO147jn47DPYvx+++gr+M4BKRETyF09XZ7a/bs2YSE/XG1++v3z58thsNnbu3HnDzxk8eDBffPEFX3zxxTXPK1u2LE888QQvvvgiEyZMuOI527dvp2XLlvTt25eXX375hmu4Vbojczu8vWHECPPn11+Hc+esrUdERHKMzWbDy83FksfNrIBbuHBh2rRpw+eff05iYuJlx6+0m7ePjw+vvPIKo0aNIiEh4ZrXHzFiBLt37+aHH3647Ni2bdto3rw5vXr1YtSoUTdc8+1QkLldTzwBZctCTAx8+KHV1YiIiPD555+TlpZGvXr1+PXXX9mzZw87duzgk08+ITIy8orP6du3L/7+/kybNu2a1w4KCmLw4MF88sknWdq3bt1K8+bNad26NYMHDyY6Opro6GhOnjyZbe/rShRkbperK7z5pvnzu+9CDv+BiYiIXE94eDjr16+nefPmDBkyhKpVq3LXXXexcOFCxo4de8XnuLq68sYbb3Dx4sXrXn/o0KH4+Phkafvll184efIkU6ZMoXjx4hmPunXrZst7uhqbcbOjghxMfHw8/v7+xMXF4efnlzMvYrdDnTqwYQM8+6zuzIiIOLiLFy9y4MABypQpg4eHh9Xl5FvX+pxv9Ptbd2Ru0bHYC4yas52UNDs4OcGYMeaBL76AQ4esLU5ERKSAUJC5BWl2g27jVvLVsgNMWZUeWu66C1q0MKdhjxxpbYEiIiIFhILMLXB2svFUs3IAfPTXHs4mJoPNlnlXZvJk2LrVwgpFREQKBgWZW/RA3VAqFfcj7kIKH/6122ysWxe6djU3knzpJWsLFBERKQAUZG6Rs5ONEXdXBmDqv4fZfSJ93v2oUeZeTLNnw/LlFlYoIiKS/ynI3IbIskVoWyWYNLvBG79vN5eFrlgRLu0A+uKL5t0ZERERyREKMrfppfaVcHN2YtmeUyzaGWM2jhwJHh6wYgX8/ru1BYqIiORjCjK3qVQRL/o0KgPAm3N2kJxqhxIl4JlnzBOGDYO0NAsrFBERyb8UZLLBwBblKOrjzoFTiUxeedBsfOEFCAiAbdtgyhQryxMREcm3FGSygY+7C//XpiIAHy/cw+lzSVCokHk3BsyNJW9gyWcRERG5OQoy2eS+2iWpWsKPhIupvP9n+nTsQYPMbqbDh+Eqe1uIiIjkhOjoaAYNGkR4eDju7u6EhobSsWNHFi5cCEDp0qWx2WysWrUqy/OeffZZmjVrlvH7q6++is1mo1+/flnO27hxIzabjYMHD2a0Pf3009SuXRt3d3dq1KiRU28tCwWZbOLkZGPE3VUA+GH1YXYcjwdPT3j1VfOEUaMgPt66AkVEpMA4ePAgtWvXZtGiRbz77rts2bKF+fPn07x5cwYMGJBxnoeHBy+88MJ1r+fh4cGECRPYs2fPdc/t06cPDzzwwG3VfzMUZLJRvTKF6VCtOHYDXp+dPh27d2+IiIDTp+G996wuUURECoCnnnoKm83G6tWr6dq1KxUqVKBKlSoMHjw4yx2Yvn37smrVKubOnXvN61WsWJHmzZszfPjwa573ySefMGDAAMLDw7PlfdwIBZls9mLbCNxcnFi5/zR/bD8BLi7m3RiADz6AEyesLVBERG6NYUBiojWPm1iT7MyZM8yfP58BAwbg7e192fGAgICMn8uUKUO/fv0YNmwYdrv9mtcdM2YMv/76K2vXrr3hWnKDgkw2Cy3sRd/GZhJ9a+4OklLT4J57oF498y/jG29YXKGIiNyS8+fBx8eax/nzN1zm3r17MQyDiIiIGzr/5Zdf5sCBA0ydOvWa59WqVYtu3brdUFdUblKQyQH9m5Ul0NedQ6fPM3HFwawbSo4bB/v2WVqfiIjkX8ZNrihfrFgxhg4dyogRI0hOTr7muW+++SbLli3jjz/+uJ0Ss5WCTA7wdnfhhbZmEv5s0V5OJiRB8+bQpg2kpsIrr1hcoYiI3DQvLzh3zpqHl9cNl1m+fHlsNhs7d+684ecMHjyYCxcu8MUXX1zzvLJly/LEE0/w4osv3nRgyikKMjnknpolqB4awLmkVN5bsMtsHD3a/N/vv4cNG6wrTkREbp7NBt7e1jxsthsus3DhwrRp04bPP/+cxMTEy47HxsZe1ubj48Mrr7zCqFGjSEhIuOb1R4wYwe7du/nhhx9uuKacpCCTQ5z+szv2T+ui2Ho0DmrWhO7dzRMuLZYnIiKSzT7//HPS0tKoV68ev/76K3v27GHHjh188sknREZGXvE5ffv2xd/fn2nTpl3z2kFBQQwePJhPPvnksmN79+5l48aNREdHc+HCBTZu3MjGjRuv22V1OxRkclDtsEJ0qh6CYcDrl3bHfuMNcybTggWweLHVJYqISD4UHh7O+vXrad68OUOGDKFq1arcddddLFy4kLFXWaDV1dWVN954g4s3sBL90KFD8fHxuaz98ccfp2bNmowbN47du3dTs2ZNatasybFjx277PV2NzcgrnVw5JD4+Hn9/f+Li4vDz88v11z8We4EW7//NxRQ7Xzxci/Z3FIeBA+Hzz82ZTKtW3dQtQxERyXkXL17kwIEDlClTBg8PD6vLybeu9Tnf6Pe37sjksJAAT55sUhYwp2NfTEkzB/t6e8Pq1TB9usUVioiIOC4FmVzQr2lZivt7cOTsBSYsPwBBQTB4sHnwpZfMmUwiIiJy0xRkcoGnmzMvtjOnY3++eC8n4i/C0KFQtCjs2gWTJllboIiIiINSkMklnaqHULNUAOeT03hn/i7w84NLe1a8+ipcuGBpfSIiIo5IQSaX2Gw2RnY0d8f+df0RNh+JhX79oFQpOHoUPv3U2gJFROQy+Xw+jOWy4/NVkMlFNUIDuLdmCSB9d2x3d3j9dfPg6NFw9qyF1YmIyCWurq4AnL+JPY7k5l36fC993rfCJbuKkRvzf20jmLc1mrWHzjJ783E69egB770HW7fC229n7skkIiKWcXZ2JiAggJiYGAC8vLywaamMbGMYBufPnycmJoaAgACcnZ1v+VpaR8YCny7cw/t/7ibE34OFQ5rhuWAudOoEHh6wdy+UKGF1iSIiBZ5hGERHR19xSX/JHgEBAQQHB18xJN7o97fuyFjgiSbh/LAmiqOxFxi/dD/P3H03NGwIK1bAa6/B+PFWlygiUuDZbDaKFy9OYGAgKSkpVpeT77i6ut7WnZhLdEfGIr9vPsbAaRvwdHVm0dCmFN+6Hho1Amdn2LYNKla0ukQRERHLaGXfPK7DHcWpW7oQF1LSp2M3bAgdO0JaWua0bBEREbkmBRmL2Gw2RtxdBZsNpm84yvrDZ+Gtt8x9l379FdassbpEERGRPE9BxkJ3lPTnvlolAXM6tr1yFXjkEfPgiy9C/u71ExERuW0KMhZ7vm1FvN2c2RgVy8xNR83Bvm5usGgR/Pmn1eWJiIjkaXkmyIwZMwabzcazzz6b0Xbx4kUGDBhAkSJF8PHxoWvXrpw4ccK6InNAoK8HA1qUA+Dtebs4X7wEPPWUefDFF8Fut7A6ERGRvC1PBJk1a9Ywbtw4qlWrlqX9ueeeY/bs2fz8888sWbKEY8eOce+991pUZc7p07AMoYU9iY6/yJd/7zMH+/r6woYN8NNPVpcnIiKSZ1keZM6dO8fDDz/MV199RaFChTLa4+LimDBhAh988AEtWrSgdu3aTJw4kX/++YdVq1ZZWHH283B15qV2lQAYt3Q/R5y94PnnzYMvvwzJyRZWJyIikndZHmQGDBhAhw4daNWqVZb2devWkZKSkqU9IiKCUqVKsXLlytwuM8e1rRpM/TKFSUq18/b8XfDccxAUBPv2wddfW12eiIhInmRpkPnhhx9Yv349o0ePvuxYdHQ0bm5uBAQEZGkPCgoiOjr6qtdMSkoiPj4+y8MR2Gw2RnSsjM0GszcdY+2pZHjlFfPg66/DuXPWFigiIpIHWRZkoqKieOaZZ5g6dSoeHh7Zdt3Ro0fj7++f8QgNDc22a+e0KiH+PFjXrPe12duxP/Y4hIfDiRPw0UfWFiciIpIHWRZk1q1bR0xMDLVq1cLFxQUXFxeWLFnCJ598gouLC0FBQSQnJ1+2WdeJEycIDg6+6nWHDRtGXFxcxiMqKiqH30n2GtK6Ir7uLmw5GsevW2PgzTfNA++8A6dOWVuciIhIHmNZkGnZsiVbtmxh48aNGY86derw8MMPZ/zs6urKwoULM56za9cuDh8+TGRk5FWv6+7ujp+fX5aHIynq486gluZ07HcW7OJcl65QsyYkJJgr/4qIiEiGPLVpZLNmzahRowYfpXej9O/fn7lz5zJp0iT8/PwYNGgQAP/8888NXzOvbhp5Lcmpdlp/uISDp8/zVLOy/J/tELRtay6Ut2cPlCpldYkiIiI5Kl9sGvnhhx9y991307VrV5o0aUJwcDC//fab1WXlODcXJ15qb07H/nr5AaLqNILmzc1p2CNHWlydiIhI3pGn7sjkBEe8IwNgGAY9JvzLir2naX9HMF+UT4P69cHJCTZvhipVrC5RREQkx+SLOzIFmc1m45W7K+Nkg7lbollVtCzce6+5ZcFLL1ldnoiISJ6gIJOHRQT78VB9czzM67O3k/bGm+YdmVmzYMUKi6sTERGxnoJMHjf4ror4ebiw/Xg8P5/zhj59zAMvvgj5u1dQRETkuhRk8rjC3m4806oCAO/9sYtzLw4HDw9YvhzmzLG4OhEREWspyDiAng3CCC/qzalzyXy6+wI8/bR5YNgwSEuztjgRERELKcg4ADcXJ16+25yOPXH5QaL6DoKAANi6FaZOtbY4ERERCynIOIjmFQNpUqEYyWl23lgRbY6RARgxApKSrC1ORETEIgoyDsJms/FKh0o4O9n4Y/sJVrXvDiEhcOgQjB1rdXkiIiKWUJBxIOWDfOnZIAyAVxceJG3ECPPAqFEQH29hZSIiItZQkHEwz7Yqj7+nKzujE/ihSiuoWNHcFfv9960uTUREJNcpyDiYAC83nmtVHoD3F+8nceRr5oH334cTJyysTEREJPcpyDighxuEUS7QhzOJyXzoUxXq1oXERHjzTatLExERyVUKMg7I1dmJV+6uDMCklYc49mL6jtjjxsH+/RZWJiIikrsUZBxU0wrFaBERSKrd4JX4QGjdGlJS4JVXrC5NREQk1yjIOLDhHSrh4mRj4c4Y1vV/wWycNg02brS0LhERkdyiIOPAyhbzodedpQF4cb8z9gceMA8MG2ZdUSIiIrlIQcbBPd2iPIW8XNkTc44Z9/YDFxeYPx/+/tvq0kRERHKcgoyD8/dyZXDrigC8vjOZpD6PmQdeeAEMw8LKREREcp6CTD7QvW4oFYN8iT2fwqd3dgcvL1i9GqZPt7o0ERGRHKUgkw+4ODsxoqM5HXvsrkTOPDnAPDB8OKSmWliZiIhIzlKQyScalivKXZWDSLMbDCvbFooUgZ074dtvrS5NREQkxyjI5CPD21fC1dnGgqgL7Hn8abNx5Ei4cMHawkRERHKIgkw+UrqoN482LAPAwIAGGKGhcPQofPaZxZWJiIjkDAWZfGZgi3IU8XZjV2wKy3oMMhtHj4bYWEvrEhERyQkKMvmMn4crQ9uY07GfdqlCaqXKcPYsvP22xZWJiIhkPwWZfKhbnVAqFfcjNtngxy79zMaPP4Zjx6wtTEREJJspyORDzk42RqZPx37FXobzdRuYA35fe83iykRERLKXgkw+1SC8CO2qBmPHxnvNe5uNEybArl2W1iUiIpKdFGTysWHtKuHm7MQ3tpKcbHoXpKXByy9bXZaIiEi2UZDJx0oV8eKxxuZ07P+r9QCGzQa//AJr1lhcmYiISPZQkMnnBjQvRzFfdxa7BbOndRezcdgwS2sSERHJLgoy+ZyPuwvPp0/HHlSxM4abGyxcCH/+aXFlIiIit09BpgC4r1ZJ7ijhzy7Povxz1/1m44svgt1ubWEiIiK3SUGmAHBysmXsjv1M2fak+fjC+vXw888WVyYiInJ7FGQKiLqlC9OhWnFOefrza/MHzMaXX4aUFGsLExERuQ0KMgXIsHYRuLs48Wq5NiQVLgp798LXX1tdloiIyC1TkClAShbyom+TcM67efJF4+5m4+uvQ2KitYWJiIjcIgWZAqZf07IE+bnzRfkWxIWEQnQ0fPSR1WWJiIjcEgWZAsbb3YUX2kaQ4uzKqHrpd2XeeQdOn7a2MBERkVugIFMAdalRguqhAfxcoRFHS1eE+Hh46y2ryxIREblpCjIFkFP67tiGzYmX6j1kNn72GRw+bG1hIiIiN0lBpoCqVaoQnWuEsKR0LbZWqAnJyfDqq1aXJSIiclMUZAqwF9pG4OHmzMv1e5gN334L27dbW5SIiMhNUJApwEICPOnXtCwbQyqypEojc8uCl16yuiwREZEbpiBTwD3ZpCwh/h683uBh7E5OMHMm/POP1WWJiIjcEAWZAs7TzZkX2kWwr2gov1W7y2x88UUwDGsLExERuQEKMkKn6iHUKhXAe5HdSXF1h2XLYO5cq8sSERG5LgUZwWazMbJjFaL9ijKhZgezcdgwSEuztjAREZHrUJARAKqHBnBvrRKMbXA/5zx9YMsWmDbN6rJERESuSUFGMrzQNoIU/wA+r9fVbHjlFUhKsrYoERGRa1CQkQxBfh481awsE2t35KRfETh0CL780uqyRERErkpBRrJ4vHE4RYoV4oPI9A0l33zT3ItJREQkD1KQkSw8XJ15qX0lfqp2FwcKl4BTp+CDD6wuS0RE5IoUZOQy7e8IpnZ4Md5p3NNseP99iImxtigREZErUJCRy9hsNkZ0rMz8iIZsCi4P586ZXUwiIiJ5jIKMXFHVEv7cXyeUt5v2AsD48kvYv9/iqkRERLJSkJGrGtqmIpsr1mFp6ZrYUlJgxAirSxIREclCQUauKtDXgwHNy2XelZk2DTZtsrgqERGRTJYGmbFjx1KtWjX8/Pzw8/MjMjKSefPmZRxv1qwZNpsty6Nfv34WVlzw9GlUmoTK1Zgd0RibYZhbF4iIiOQRlgaZkiVLMmbMGNatW8fatWtp0aIFnTt3Ztu2bRnnPPHEExw/fjzj8c4771hYccHj7uLMS+0jeK9JT1KcnGHePFiyxOqyREREAIuDTMeOHWnfvj3ly5enQoUKjBo1Ch8fH1atWpVxjpeXF8HBwRkPPz8/CysumNpUCaZ47ar8UL2N2fDCC2AY1hYlIiJCHhojk5aWxg8//EBiYiKRkZEZ7VOnTqVo0aJUrVqVYcOGcf78+WteJykpifj4+CwPuT02m40Rd1fh04bdOe/qDv/+CzNmWF2WiIiI9UFmy5Yt+Pj44O7uTr9+/Zg+fTqVK1cG4KGHHmLKlCksXryYYcOG8d1339GjR49rXm/06NH4+/tnPEJDQ3PjbeR7lUP8aNm8OhPqdAHAGD4cUlOtLUpERAo8m2FY20eQnJzM4cOHiYuL45dffuHrr79myZIlGWHmvxYtWkTLli3Zu3cvZcuWveL1kpKSSPrPjs3x8fGEhoYSFxenbqnbdOpcEh3fmMPcT3pT6GICTJgAffpYXZaIiORD8fHx+Pv7X/f72/I7Mm5ubpQrV47atWszevRoqlevzscff3zFc+vXrw/A3r17r3o9d3f3jFlQlx6SPYr6uNOnQw0+j7wfAPuIkXDhgsVViYhIQWZ5kPlfdrs9yx2V/9q4cSMAxYsXz8WK5L963Vmapa26cdS3GE5Hj8B771ldkoiIFGCWBplhw4axdOlSDh48yJYtWxg2bBh///03Dz/8MPv27eONN95g3bp1HDx4kFmzZvHII4/QpEkTqlWrZmXZBZqbixPPd6nBh40fNhtGjIChQzVeRkRELGFpkImJieGRRx6hYsWKtGzZkjVr1rBgwQLuuusu3Nzc+Ouvv2jdujUREREMGTKErl27Mnv2bCtLFqBVpUCiuzzAp5EPmA3vvw/t2sHp09YWJiIiBY7lg31z2o0OFpKbs+dEAp0+W0GzLUv4cP7HeCRdgDJlzGnZumMmIiK3yWEG+4pjKh/ky9e96rCwahM6P/wup4qVgAMHIDISfvnF6vJERKSAUJCRW9awXFHG9ajN/uAytOz+HrvuqA/nz8P998Pw4ZCWZnWJIiKSzynIyG1pHhHIp91rcc7bj/ZtX2Jpp0fMA2+9BZ07Q2yspfWJiEj+piAjt61t1WA+6FYdu7Mzj1Tqxq/PjcHw8IA5c6B+fdixw+oSRUQkn1KQkWzRuUYJ3ulqDvId4laVSe9MwQgNhd27zTAza5bFFYqISH6kICPZ5v46obzRpSoArx31YPz7P0KTJpCQYHYzvf462O0WVykiIvmJgoxkq54Nwni5QyUARq87w/gR42DgQPPgyJHQtasZbERERLKBgoxku8cbh/N8m4oAvPXnPiY+ONjcYNLNzVxnpkEDuMZ+WSIiIjdKQUZyxIDm5Xi6RTkAXpu9nWlVWsHSpRASAtu3Q926MH++xVWKiIijU5CRHPPcXRXo2yQcgOEztvCrSwlYu9ZcNC82Ftq3h7ffhvy9uLSIiOQgBRnJMTabjWHtIugVGYZhwPO/bGJ2jAGLF8MTT5gB5sUX4cEHITHR6nJFRMQBKchIjrLZbIzsWIUH64ZiN+DZHzfyx96zMG4cjB0LLi7w00/QsCEcPGh1uSIi4mAUZCTHOTnZGHXPHXSpEUKa3WDgtA38vfsk9OsHixZBYCBs2gR16pi/i4iI3CAFGckVzk423ru/Ou3vCCY5zc6T363jn72noHFjc9xMnTpw+jS0bg0ffaRxMyIickMUZCTXuDg78dEDNWlVKZCkVDuPfbuWtQfPQGioOaOpZ09zo8nnnoPeveHCBatLFhGRPE5BRnKVm4sTnz1Ui8bli3IhJY3eE9ewKSoWPD3h22/NuzHOzjB5srkqcFSU1SWLiEgepiAjuc7D1ZnxPetQv0xhziWl8sg3q9l+LB5sNnjmGViwAIoUyexyWrbM6pJFRCSPUpARS3i6OTOhd11qlQog7kIKPSb8y54T6VsXtGwJa9ZA9eoQEwMtWsCXX2rcjIiIXEZBRizj4+7CpD71uKOEP2cSk3no6385cCp9PZkyZWDFCnjgAUhNhf794cknISnJ2qJFRCRPUZARS/l5uDK5Tz0ign05mZDEw1+tIurMefOgtzd8/z2MGWN2O331FTRvDsePW1u0iIjkGQoyYrlC3m5Mebw+ZYt5cyzuIg99vYrjcekzlmw2eOEFmDsXAgJg5UqoXRtWrbK0ZhERyRsUZCRPKOrjzrQnGhBWxIuoMxd4+Kt/iUm4mHlC27awejVUrmzekWnaFL75xrqCRUQkT1CQkTwjyM+DqY/Xp0SAJ/tPJdLj6385k5iceUL58uadmC5dIDkZHnsMBg2ClBTLahYREWspyEieUrKQF9OeqE+Qnzu7T5yjx9f/Enf+P0HF1xd+/RVef938/bPPoFUrc3aTiIgUOAoykueEFfFm6uMNKOrjxvbj8TwycTUJF/8TZpyc4JVXYOZMM9gsXWquN7NunXVFi4iIJRRkJE8qF+jDlMfrE+DlyqaoWPpMWsP55NSsJ3XqBP/+a3Y5RUVBo0Ywdao1BYuIiCUUZCTPigj247s+9fH1cGHNwbM8MXktF1PSsp5UqZI5CLh9e7h4EXr0gCFDzLVnREQk31OQkTztjpL+THq0Ht5uzqzYe5r+U9aRnGrPelJAAMyaBcOHm79/8AG0a2fupi0iIvmagozkebXDCvFN77p4uDqxeNdJBn2/npS0/wkzzs7w5pvw88/g5QV//QV168LmzdYULSIiuUJBRhxC/fAifPVIHdxcnFiw7QSDf9pEmv0Key/dd5+5aF6ZMnDgAERGwi+/5H7BIiKSKxRkxGE0Ll+MsQ/XwsXJxuxNx3jh183YrxRmqlUzN51s1QrOn4f77ze7ndLSLj9XREQcmoKMOJSWlYL4tHtNnJ1s/LLuCCNmbcW40q7YRYrAvHnmwF+At94yZznFxuZqvSIikrMUZMThtLujOB90q47NBlNWHeaN33dcOcy4uMB778GUKeDhYe7XVL8+7NiR+0WLiEiOuKUgExUVxZEjRzJ+X716Nc8++yzjx4/PtsJErqVzjRK8fW81AL5ZcYB3F+y6cpgBePhhWLECQkNh924zzMyalYvViohITrmlIPPQQw+xePFiAKKjo7nrrrtYvXo1w4cP5/VLS8eL5LBudUN5vXMVAL74ex+fLtp79ZNr1YK1a6FJE0hIgM6dzW0O7ParP0dERPK8WwoyW7dupV69egD89NNPVK1alX/++YepU6cyadKk7KxP5JoeiSzN8PaVAPjgz92MX7rv6icHBprTsgcONH8fORK6djWDjYiIOKRbCjIpKSm4u7sD8Ndff9GpUycAIiIiOH78ePZVJ3IDnmgSzpC7KgDw1tydfPvPwauf7OoKn34KEyaAmxvMmAENGsDea9zNERGRPOuWgkyVKlX48ssvWbZsGX/++Sdt27YF4NixYxQpUiRbCxS5EYNalmdg83IAjJy1jR9WH772E/r0MTebDAmB7dvNxfPmz8+FSkVEJDvdUpB5++23GTduHM2aNaN79+5Ur14dgFmzZmV0OYnktiGtK/B4ozIADJu+hekbjlz7CfXrm+NmIiPNadnt28Pbb8PVBg2LiEieYzOuOtXj2tLS0oiPj6dQoUIZbQcPHsTLy4vAwMBsK/B2xcfH4+/vT1xcHH5+flaXIznMMAxGzNzGd6sO4WSDzx6qRfs7il/7SUlJ5riZr782f+/WDb75Bry9c75gERG5ohv9/r6lOzIXLlwgKSkpI8QcOnSIjz76iF27duWpECMFj81m47VOVehWpyR2A57+fgN/bT9x7Se5u8P48TB2rLn2zE8/wZ13mlsciIhInnZLQaZz585MnjwZgNjYWOrXr8/7779Ply5dGDt2bLYWKHKznJxsjL63Gp1rhJBqN3hq6nqW7j557SfZbNCvHyxaZM5u2rwZ6tSBhQtzp2gREbkltxRk1q9fT+PGjQH45ZdfCAoK4tChQ0yePJlPPvkkWwsUuRXOTjbev786basEk5xmp+93a1m1//T1n9i4sTlupnZtOHMG2rSBjz7SuBkRkTzqloLM+fPn8fX1BeCPP/7g3nvvxcnJiQYNGnDo0KFsLVDkVrk4O/FJ95q0iAjkYoqdPpPWsO7Q2es/MTQUli2Dnj3NjSafew5694YLF3K8ZhERuTm3FGTKlSvHjBkziIqKYsGCBbRu3RqAmJgYDaiVPMXNxYkvHq5Fo3JFOZ+cRu9vVrP5SOz1n+jpCd9+a96NcXaGyZPNVYGjonK6ZBERuQm3FGRGjBjB0KFDKV26NPXq1SMyMhIw787UrFkzWwsUuV0ers6Mf6Q29UoXJiEplZ4TVrPjePz1n2izwTPPwIIF5m7aa9ea42aWLcv5okVE5Ibc8vTr6Ohojh8/TvXq1XFyMvPQ6tWr8fPzIyIiIluLvB2afi2XnEtKpcfX/7IxKpYi3m78+GQDygX63tiTDxyAe+6BTZvMmU2ffGIODrbZcrZoEZEC6ka/v285yFxyaRfskiVL3s5lcoyCjPxX3IUUHvpqFduOxRPo685PT0ZSuugNrheTmAiPPQY//mj+/vjj8Nln5vRtERHJVjm6jozdbuf111/H39+fsLAwwsLCCAgI4I033sCu3YQlD/P3dOW7x+pTMciXmIQkHv76X46cPX9jT/b2hu+/hzFjzDsxX39tznJavFizmkRELHJLQWb48OF89tlnjBkzhg0bNrBhwwbeeustPv30U1555ZXsrlEkWxX2dmPK4/UJL+bN0dgLPPTVv0THXbyxJ9ts8MILMHcuBATAmjXQogU0bAhz5ijQiIjkslvqWgoJCeHLL7/M2PX6kpkzZ/LUU09x9OjRbCvwdqlrSa4mOu4i3cat5PCZ84QX8+bHvpEU872JbqKoKPPuzIQJ5jYHANWrw0svQdeu5mwnERG5JTnatXTmzJkrDuiNiIjgzJkzt3JJkVwX7O/BtCfqE+Lvwf6TifSc8C9nE5Nv/AKhofD553DwIDz/PPj4mIOBH3gAKleGiRMh+SauJyIiN+2Wgkz16tX57LPPLmv/7LPPqFat2m0XJZJbShbyYtoTDQj0dWdndAI9v/mXuAspN3eR4GB45x04dAhefRUKFYLdu6FPHyhXzhwQrMX0RERyxC11LS1ZsoQOHTpQqlSpjDVkVq5cSVRUFHPnzs3YviAvUNeS3Ii9MQk8MG4VpxOTqVkqgO8eq4+Pu8utXSwhAcaNg/ffh+hosy0wEAYPhv79QX8PRUSuK0e7lpo2bcru3bu55557iI2NJTY2lnvvvZdt27bx3Xff3XLRIlYpF+jLd4/Vx9/TlQ2HY+kzaQ0XktNu7WK+vjB0qLn2zBdfQFgYxMTAiy+aP48YAadOZe8bEBEpoG57HZn/2rRpE7Vq1SIt7Ra/AHKA7sjIzdh8JJaHv/qXhKRUGpcvyleP1MHD9TYH7aakmNO2R4+GnTvNNi8vc0G9IUMgJOT2CxcRyWdy9I6MSH5VrWQAk/rUxcvNmWV7TvHU1PUkp97m2kiurvDII7BtG/zyC9SsCefPwwcfQJkyZqDZvz973oCISAFjaZAZO3Ys1apVw8/PDz8/PyIjI5k3b17G8YsXLzJgwACKFCmCj48PXbt25cSJExZWLAVB7bDCTOhVF3cXJxbtjOGZHzaQmpYNCz06OZnTstetg3nzoFEjc1bTuHFQoYK52/b27bf/OiIiBYilQaZkyZKMGTOGdevWsXbtWlq0aEHnzp3Ztm0bAM899xyzZ8/m559/ZsmSJRw7dox7773XypKlgIgsW4Txj9TBzdmJeVujGfLzJtLs2dQLa7NB27bm5pNLl5o/p6XBlClQpQrce6+5QaWIiFzXTY2RuV6IiI2NZcmSJbc1RqZw4cK8++673HfffRQrVoxp06Zx3333AbBz504qVarEypUradCgwQ1dT2Nk5Hb8tf0E/aasI9Vu0K1OScbcWw0npxzYKHLdOnjrLfjtt8y21q1h+HBzGwRtTikiBUyOjJHx9/e/5iMsLIxHHnnklgpOS0vjhx9+IDExkcjISNatW0dKSgqtWrXKOCciIoJSpUqxcuXKq14nKSmJ+Pj4LA+RW9WqchAfP1gTJxv8tPYII2dtIxvHx2eqXRt+/dUcR9Ozp7kq8B9/QNOmZpCZN0/bH4iIXMFNLZQxceLEbC9gy5YtREZGcvHiRXx8fJg+fTqVK1dm48aNuLm5ERAQkOX8oKAgoi+tzXEFo0eP5rXXXsv2OqXg6lCtOMlp1Rn80ya+W3UID1cnXmpfCVtO3CWpXBkmT4bXXjMX2fvmG1ixAtq3NwcJv/QS3HOPtj8QEUln+aylihUrsnHjRv7991/69+9Pr1692H4bAx6HDRtGXFxcxiMqKiobq5WC6p6aJRl9zx0AfLXsAB/8uTtnX7BMGRg71lyLZsgQc+ftDRvg/vvNcTTffmtO6xYRKeAsDzJubm6UK1eO2rVrM3r0aKpXr87HH39McHAwycnJxMbGZjn/xIkTBAcHX/V67u7uGbOgLj1EssOD9UrxWqcqAHy6aC+fL96b8y8aEgLvvWdufzBihLnj9q5d0Ls3lC9vLrin7Q9EpACzPMj8L7vdTlJSErVr18bV1ZWFCxdmHNu1axeHDx/O2BZBJLf1urM0w9qZG6a+u2AX45fuy5kxM/+rSBGzu+nQIXj7bQgKMn8eMMC8e/POO+bWCCIiBUy2rux7s4YNG0a7du0oVaoUCQkJTJs2jbfffpsFCxZw11130b9/f+bOncukSZPw8/Nj0KBBAPzzzz83/BqatSQ54eO/9vDhX2b30p1lizC8QyWqhPjnXgEXLpjjZ955Bw4fNtsKFYJBg+Dpp83gIyLiwG70+9vSIPPYY4+xcOFCjh8/jr+/P9WqVeOFF17grrvuAswF8YYMGcL3339PUlISbdq04Ysvvrhm19L/UpCRnGAYBl8u2c+Hf+0mOdWOzQb31SrJ0DYVCfLzyL1CUlJg6lRz+4Pd6eN2vL0ztz8oXjz3ahERyUYOEWRyg4KM5KSoM+d5Z8EuZm86BoCnqzP9mpbliSZl8HK7xd2zb0VamrkGzahRsGmT2ebuDo8+Cv/3f2b3k4iIA1GQSacgI7lh/eGzvPn7dtYfjgUg2M+D59tU5J6aJXJmAb2rMQxzzZlRo+BSF6yzMzz0EAwbBpUq5V4tIiK3QUEmnYKM5BbDMJiz5Thj5u3kyFlzJlHVEn4Mb1+ZyLK5PGbFMMztD0aNgj//NNtsNnMNmpdeMhfgExHJwxRk0inISG67mJLGpH8O8vmivSQkpQLQunIQw9pXokxR79wvaM0ac/uDGTMy29q0ydz+QEQkD1KQSacgI1Y5fS6Jj/7aw7TVh0mzG7g42egZGcYzLcsT4OWW+wVt22YOCv7+e7Cn7+bdqJEZaNq00X5OIpKnKMikU5ARq+2NSeCtuTtZtDMGAH9PV55uWZ6eDcJwc7FgKad9+8xp25MmQXKy2VarVub2B055bnkpESmAFGTSKchIXrFsz0lGzdnBzmhz4brSRbwY1r4SrSsH5cy+Tddz9Ci8/z6MGwfnz5ttERHmoODu3cHVNfdrEhFJpyCTTkFG8pI0u8HPa6N474/dnDqXBEC9MoV5pUNl7iiZiwvq/dfJk/DJJ/DppxAXZ7aVLm1O2370UfDIxXVxRETSKcikU5CRvOhcUipf/r2Pr5btJynVHK9yb60SPN+mIsX9Pa0pKi7O3Kjygw/McAMQHGwurPfkk+Dra01dIlIgKcikU5CRvOxY7AXeXbCL6RuOAuDh6kTfxuE82bQs3u65uKDef50/DxMmmONojhwx2woVgmeeMbdAKFzYmrpEpEBRkEmnICOOYFNULKPm7GD1wTMAFPN15/nWFelauyTOubmg3n8lJ8OUKTBmDOzZY7b5+ED//jB4sHm3RkQkhyjIpFOQEUdhGAYLtkXz1tydHD5jDr6tVNyPlztUomG5otYVlpYGv/xirkWzebPZ5u4Ojz0Gzz9vjqcREclmCjLpFGTE0SSlpvHdykN8vHAPCRfNBfVaRgQyrH0lygX6WFeYYcDvv5urBf/7r9nm4gIdO0Lv3tCunWY6iUi2UZBJpyAjjupMYjKfLNzDlFWHSLUbODvZ6FG/FM+0qkBhbwsW1LvEMGDxYvMOzcKFme2BgdCjhxlq7rjDsvJEJH9QkEmnICOObt/Jc4yeu5O/dpwAwNfDhUEtytHrztK4uzhbW9zmzfDtt+ZYmpiYzPZatcxA0707FLWwW0xEHJaCTDoFGckv/tl3ijd/38H24/EAhBb2ZFi7SrSrGmzNgnr/lZJi7ro9aRLMng2pZpcYrq7QqZMZatq0UdeTiNwwBZl0CjKSn6TZDX5bf4R3F+wiJsFcUK9OWCFevrsyNUIDrC3ukpMnzf2cJk2CDRsy24OCMrueqla1qjoRcRAKMukUZCQ/Op+cyrgl+xm3dB8XU8wF9TrXCOH/2kZQIsCiBfWuZNOmzK6nS4vsAdSundn1VKSIZeWJSN6lIJNOQUbys+i4i7y7YBe/bTiCYYC7ixOPNy5D/2bl8LFqQb0ruZGup7ZtzVlQIiIoyGRQkJGCYOvRON6cs51V+80F9Yr6uDH4rop0q1MSF+c8tpv1tbqeevaEXr3U9SQiCjKXKMhIQWEYBn9uP8HoeTs5cCoRgIpBvgzvUIkmFYpZXN1VbNpkBpopU+DUqcz2OnUyu560JYJIgaQgk05BRgqa5FQ7U/89xEd/7SHuQgoAzSoWY3j7SpQPyqMbPyYnZ3Y9/f57ZteTm1vWWU/qehIpMBRk0inISEEVez6ZTxftZfLKg6SkmQvqPVg3lOfuqkBRH3ery7u6kydh2jQz1GzcmNkeHJw566lKFYuKE5HcoiCTTkFGCrqDpxIZM28n87dFA+Dj7sKA5uV4tGFpPFwtXlDvejZuzJz19N+up7p1zUDz4IPqehLJpxRk0inIiJj+3X+aN+fsYMvROABKBHjyQrsIOlYrbv2CeteTnAxz55p3aebMydr11LmzGWpat1bXk0g+oiCTTkFGJJPdbjBj41Hemb+L6PiLANQsFcDLHSpTO6yQxdXdoJiYzK6nTZsy24ODzVlPvXtD5cpWVSci2URBJp2CjMjlLiSn8fWy/Yxdso/zyWkA3F2tOC+0jSC0sJfF1d2EjRvNQDN1qrqeRPIZBZl0CjIiVxcTf5H3/9jNT+uiMAxwc3GiT8MyPNW8LH4eDrQv0rW6nrp0MUPNXXep60nEgSjIpFOQEbm+7cfiGTV3Oyv2ngagsLcbz91Vge51Q/PegnrXc6nraeJEc3fuS4oXz1xwT11PInmegkw6BRmRG2MYBot3xTBqzg72nTQX1CsX6MPw9pVoVrFY3h8QfCVX63qqVy+z66mQg4wNEilgFGTSKciI3JyUNDvfrz7Mh3/u5ux5c0G9xuWLMrxDJSKCHfT/Q8nJZpfTpa6nNHNcEO7umbOe1PUkkqcoyKRTkBG5NXEXUvhi8V4mrjhIcpodJxs8kL6gXqCvh9Xl3boTJzK7nrZsyWwPCcnseqpUybr6RARQkMmgICNyew6fPs/b83cyZ8txALzdnHmqeTkea1Qm7y+ody2GkbXr6fTpzGP165t3aR54QF1PIhZRkEmnICOSPdYePMMbc3awKSoWgBB/D/6vbQSdqofg5OSA42f+61pdT/+d9eTswMFNxMEoyKRTkBHJPna7wezNx3hn/i6Oxl4AICLYl0EtytOuarDjBxq4ftdT794QEWFZeSIFhYJMOgUZkex3MSWNCcsP8OXf+0hIMtdsKR/ow8AW5bi7WgjO+SHQXOp6mjjR7Ho6cybzWIMGmV1PAQEWFSiSvynIpFOQEck5cedTmPjPAb5ZfoD4i2agCS/mzcDm5ehUPcTx1qC5mqSkzK6nuXOzdj117AidOkH79lCkiKVliuQnCjLpFGREcl78xRQm/3OQr5cfIDZ9ynZYES8GNC/HPTVL4JpfAg2YXU9Tp5p3arZuzWx3coJGjcxQ06kTlC9vXY0i+YCCTDoFGZHccy4plckrD/L1sgOcSUwGILSwJwOalePeWiVxc8lHgcYwYMMGmD4dZs3KuoowmONoLoWaBg00UFjkJinIpFOQEcl9iUmpTP33EOOX7ufUOTPQlAjwpH+zstxfpyTuLvnwS/3QIZg92ww1f/8NKSmZx4oWhbvvNruhWrcGHx/LyhRxFAoy6RRkRKxzITmNaasP8+WSfZxMSAIg2M+D/s3K8kDdUMdeh+Za4uJgwQIz1MyZA7Gxmcfc3aFFC/NOTceOUKKEZWWK5GUKMukUZESsdzEljR/XRDH2731Ex18EINDXnSebluWheqXwdMungQbMOzMrVpihZtYs2Lcv6/HatTO7oKpXB0fc00okByjIpFOQEck7klLT+HntEcb+vS9jHZqiPm70bRJOjwZheLnl872ODAN27Mjsglq50my7JDQ0805Ns2bm3RuRAkpBJp2CjEjek5xq57f1R/hs8V6OnDUDTWFvN55oHE7PyDB83PN5oLkkJsbsepo1C/74A86fzzzm4wNt22pqtxRYCjLpFGRE8q6UNDvTNxzl88V7OXTa/BIP8HLl8UZleOTO0vh5uFpcYS66cAEWLTJDzezZcPx45jFN7ZYCSEEmnYKMSN6XmmZn1qZjfLZoL/tPJQLg5+FCn0ZlePTOMvh7FaBAA2C3w/r1meNqNm3KejwiInMhvshITe2WfElBJp2CjIjjSLMb/L75GJ8u2svemHMA+Lq70Lthafo0LEMhbzeLK7TI9aZ2d+hghhpN7ZZ8REEmnYKMiOOx2w3mbY3mk4V72HUiAQBvN2d63VmaxxuHU7igBhrIOrV77lw4ezbzmJsbtGxphpq774aSJa2rU+Q2KcikU5ARcVx2u8Ef26P5eOFedhyPB8DLzZmeDcJ4vHE4xXwL+Kye1NTMqd0zZ155avelLqgaNTS1WxyKgkw6BRkRx2cYBn/tiOGThXvYcjQOAA9XJx6uH8aTTcIJ9POwuMI8wDBg587McTVXmtp9KdRoarc4AAWZdAoyIvmHYRj8veskHy3cw6aoWADcXJx4qF4pnmwaTnF/T2sLzEs0tVscnIJMOgUZkfzHMAyW7TnFxwv3sO6QOUbEzdmJbnVL0r9ZOUoEKNBkceECLF6cebfmf6d2N2yYObW7QgXr6hT5DwWZdAoyIvmXYRis3HeajxbuYfWBMwC4Otu4r3ZJnmpWjtDCXhZXmAddb2p3xYqZoUZTu8VCCjLpFGRECoZV+0/zycI9/LPvNAAuTjburVWCAc3LEVbE2+Lq8rBLU7tnzzbv2vx3aneRIubsJ03tFgsoyKRTkBEpWNYcPMMnC/ewbM8pAJydbHSuEcLA5uUIL6Yv4muKj8+6a/f/Tu3+767dmtotOUxBJp2CjEjBtP7wWT5duIfFu04C4GSDjtXNQFM+yNfi6hzA9aZ216qVGWpq1DDH2ohkIwWZdAoyIgXb5iOxfLJwD3/tiAHMpVTa31GcQS3KERGsfxNuyKWp3ZdWF/7nn6xTuwsVgsaNoWlTaNLEDDYuBWTjT8kxCjLpFGREBGDr0Tg+XbSHBdtOZLS1rRLMoJblqBLib2FlDigmxlxVeNYs+PNPOHcu63FfX3OTy6ZNzUft2uBawPbLktvmEEFm9OjR/Pbbb+zcuRNPT0/uvPNO3n77bSpWrJhxTrNmzViyZEmW5z355JN8+eWXN/QaCjIi8l87jsfz2aK9zN16POOmwl2Vg3i6RXnuKKlAc9NSU2HDBliyxHwsW2Zuo/BfXl5w552ZwaZePS3IJ9flEEGmbdu2PPjgg9StW5fU1FReeukltm7dyvbt2/H2NmcZNGvWjAoVKvD6669nPM/Ly+uGQ4mCjIhcye4TCXy2aC+zNx/LCDQtIgIZ1KIcNUsVsrY4R5aWBps3m6Fm6VLzcfp01nM8PKBBA7MbqmlT82cvTZWXrBwiyPyvkydPEhgYyJIlS2jSpAlgBpkaNWrw0Ucf3dI1FWRE5Fr2xpzji8V7mbHxKPb0fw2bVCjGMy3LUTussLXF5Qd2O2zfnnnHZulSOHEi6zmuruZdmktjbBo21FRvccwgs3fvXsqXL8+WLVuoWrUqYAaZbdu2YRgGwcHBdOzYkVdeeQWvq6T3pKQkkpKSMn6Pj48nNDRUQUZErunAqUQ+X7yX6RuOkpaeaBqWK8LTLcpTP1xL+Gcbw4DduzODzZIlcPRo1nOcnc1xNZe6oho1An91+xU0Dhdk7HY7nTp1IjY2luXLl2e0jx8/nrCwMEJCQti8eTMvvPAC9erV47fffrvidV599VVee+21y9oVZETkRhw+fZ4v/t7LL+uOkJoeaOqXKcwzrcoTGV4Em3aQzl6GAfv3m3dqLgWbgweznuPkBNWrZwabxo21P1QB4HBBpn///sybN4/ly5dT8hoLLS1atIiWLVuyd+9eypYte9lx3ZERkexw5Ox5xv69j5/WRpGSZv4zWbd0IZ5uWZ5G5Yoq0OSkw4ezdkXt2XP5OVWrZgabJk0gKCj365Qc5VBBZuDAgcycOZOlS5dSpkyZa56bmJiIj48P8+fPp02bNte9tsbIiMjtOBZ7gXFL9vH9miiSU+0A1CwVwNMty9OsQjEFmtxw7FjmHZulS80xN/8rIiIz1DRtCiVK5H6dkq0cIsgYhsGgQYOYPn06f//9N+XLl7/uc1asWEGjRo3YtGkT1apVu+75CjIikh1OxF9k3JL9TP33EEnpgaZaSX8GNi9Hq0pBODkp0OSamBhzmveluzZbtmRdoA+gbNmsd2xKl7akVLl1DhFknnrqKaZNm8bMmTOzrB3j7++Pp6cn+/btY9q0abRv354iRYqwefNmnnvuOUqWLHnZ2jJXoyAjItkpJuEiXy3dz5RVh7mQkgZA2WLePNE4nC41S+Dhqt2ic92ZM7B8eWaw2bDBnC31X6VKZQabpk3NoKO7aXmaQwSZq92SnThxIr179yYqKooePXqwdetWEhMTCQ0N5Z577uHll1/WOjIiYqlT55L4etkBpq46REJSKgBFfdx5tGFpetQPw99LK9laJi7O3CfqUlfU2rXmwn3/FRKS2Q3VtKnZNaVgk6c4RJDJDQoyIpKTEi6m8MPqKL5ZcYDjcRcB8HJz5oG6oTzWqAwlC2mhN8udOwcrV2besVm9GpKTs55TrFjWYFO1qjbCtJiCTDoFGRHJDSlpdmZvOsb4pfvZGZ0AgLOTjQ53FKdvk3CqltA6KHnGhQvw77+ZwWblSrh4Mes5hQtnboTZtKk5/dtZ3Ya5SUEmnYKMiOQmwzBYtucU45fuZ/neUxntDcsVoW+TsjQpr6nbeU5SEqxZkzkzasUKSEzMeo6fX9aNMGvV0kaYOUxBJp2CjIhYZevROL5atp/fNx/PWC04ItiXvk3C6Vg9BFdndV3kSSkpsH595h2b5cshPj7rOd7eWTfCvPNOdUVlMwWZdAoyImK1I2fP883yg/yw5jDnk82ZTsX9PejTsAwP1gvF10P/ZZ+npaXBpk1Zd/g+cybzeOHCcPKkgkw2U5BJpyAjInlF3PkUpvx7iEn/HORkgrkCua+7Cw/VL8WjDcsQ7O9hcYVyQ+x22LYtM9j4+8PXX1tdVb6jIJNOQUZE8pqk1DRmbDjK+KX72XfSHIvh6myjU/US9G0STsVgX4srFLGegkw6BRkRyavsdoNFO2MYv3Q/qw9mdlU0q1iMvk3CtUmlFGgKMukUZETEEWw4fJbxS/czf1t0xmr7d5Twp2+TcNpVDcZFA4OlgFGQSacgIyKO5OCpRL5evp+f1x7J2NMptLAnjzUsQ7e6oXi5uVhcoUjuUJBJpyAjIo7o9LkkJq88xOSVBzl7PgWAAC9XejYIo9edpSnq425xhSI5S0EmnYKMiDiyC8lp/LIuiq+XH+DQ6fMAuLk40bVWSZ5oXIbwYj4WVyiSMxRk0inIiEh+kGY3WLAtmnFL97MpKhYw9zi8q1IQTzYNp3ZYYWsLFMlmCjLpFGREJD8xDIPVB84wful+Fu6MyWivHVaIvk3CuatSEE5Omukkjk9BJp2CjIjkV3tOJPD1sgNM33CU5DRzYHB4UW8ebxzOvbVK4OGqTQ7FcSnIpFOQEZH8Lib+IpP+OciUVYeIv5gKQFEfN3pFlqZHgzAKebtZXKHIzVOQSacgIyIFxbmkVH5cE8U3yw9wNPYCAJ6uzjxQN5THGpUhtLCXxRWK3DgFmXQKMiJS0KSk2Zmz+Tjjlu5nx3Fz12YnG7S/ozh9m4RTrWSAtQWK3AAFmXQKMiJSUBmGwYq9pxm3dB/L9pzKaG8QXpgnm5SlWcVi2gJB8iwFmXQKMiIisP1YPF8t28/sTcdItZv/7FcI8uGJxuF0rlECNxdtgSB5i4JMOgUZEZFMx2Iv8M3yA3y/+jCJyWkABPm582jDMjxUvxR+Hq4WVyhiUpBJpyAjInK5uAspTPv3MBNXHCAmIQkAH3cXutcLpU+jMhT397S4QinoFGTSKciIiFxdUmoaMzce46ul+9kTcw4AFycbnaqH8ESTcCoV17+bYg0FmXQKMiIi12e3G/y9O4ZxS/bz74EzGe1NKhTjySbh3Fm2iAYGS65SkEmnICMicnM2RcUyful+5m09Tvq4YKqW8OOJxuF0uKM4Ls4aGCw5T0EmnYKMiMitOXz6PF8v389Pa6O4mGJugVAiwJPHGpXhgbqheLu7WFyh5GcKMukUZEREbs+ZxGS+W3mIySsPcjoxGQB/T1d6NChFrztLE+jrYXGFkh8pyKRTkBERyR4XU9L4Zd0Rvl62n4OnzwPg5uzE3dWK0zMyjBqhARpHI9lGQSadgoyISPZKsxv8uT2acUv3s+FwbEb7HSX8eSQyjI7VQ7Tzttw2BZl0CjIiIjlnY1Qsk1ce5PdNx0lOM8fRBHi58kCdUHo0CNNGlXLLFGTSKciIiOS80+eS+HFtFFNXHc7Yedtmg+YVA+kZGUbT8sVwclK3k9w4BZl0CjIiIrknzW6waGcMk1cezLJRZVgRL3o2COP+2qH4e2kbBLk+BZl0CjIiItbYf/IcU1Yd5ud1USRcTAXAw9WJztVL0DMyjKol/C2uUPIyBZl0CjIiItY6n5zKjA3HmLzyIDujEzLaa5UK4JHI0rS7Ixh3Fw0OlqwUZNIpyIiI5A2GYbD20FkmrzzEvC3HSU1fNriojxsP1i3FQ/VLERKgzSrFpCCTTkFGRCTviUm4yA+ro5j67yFOxJu7bzvZ4K7KQTwSWVp7O4mCzCUKMiIieVdKmp0/t59g8sqDrNqfuVll2WLe9GwQRtfaJfH10ODggkhBJp2CjIiIY9h9IoHvVh7it/VHSExOA8DLzZl7a5XgkcjSVAjytbhCyU0KMukUZEREHEvCxRSmbzjK5JWH2BtzLqO9fpnCPBJZmtZVgnDVDtz5noJMOgUZERHHZBgGK/ef5ruVh/hj+wnS0gcHB/m5071eKR6qV4pAP21YmV8pyKRTkBERcXzH4y4w7d/DfL86ilPnzMHBLk422lYN5pHI0tQtXUiDg/MZBZl0CjIiIvlHcqqdeVuP893KQ6w9dDajPSLYl56RYXSpUQJvdxcLK5TsoiCTTkFGRCR/2nYsjimrDjFjwzEupJiDg33dXehauyQ9I8MoW8zH4grldijIpFOQERHJ3+LOp/DzuiimrDrEwdPnM9obly9KzwZhtKwUhLM2rHQ4CjLpFGRERAoGu91g2d5TfLfyIAt3xnDp261EgCcP1S/Fg3VDKeLjbm2RcsMUZNIpyIiIFDxRZ84z9d/D/LjmMGfPpwDg5uxEh2rFeSQyjBqhARocnMcpyKRTkBERKbgupqQxZ/NxJq88yKYjcRntd5Twp2dkGJ2qh+Dhqg0r8yIFmXQKMiIiArApKpbJKw8xe/MxklPtAAR4udKtTig96odRqoiXxRXKfynIpFOQERGR/zqTmMxPa83BwUfOXgDAZoNmFYrxyJ2laVq+GE4aHGw5BZl0CjIiInIlaXaDxTtjmLzqEEt3n8xoDyviRY/6YdxfpyQBXm4WVliwKcikU5AREZHrOXAqkSmrDvHz2ijiL6YC4O7iROcaITwSWZqqJfwtrrDgUZBJpyAjIiI36kJyGjM3mhtWbj8en9Fes1QAvSJL0+6OYNxdNDg4NyjIpFOQERGRm2UYBusPn2XyykPM3XKclDTzq7KItxsP1gvlofphlAjwtLjK/E1BJp2CjIiI3I6TCUn8sPow01Yf5njcRQCcbNCqUhCPRJamYbkiWpMmByjIpFOQERGR7JCaZuevHSeYvPIQ/+w7ndFeqrAXnWuE0LlGCcoFan+n7KIgk05BRkREstvemAS+W3mIX9cf5VxSakb7HSX86VwjhE7VQwj087CwQsenIJNOQUZERHLK+eRU/tx+gpkbj7F090lS7eZXqpMN7ixblM41QmhbNRhfD1eLK3U8CjLpFGRERCQ3nElMZs7mY8zYeIx1h85mtLu7ONGqUhCda4TQrGIgbi5OFlbpOG70+9vST3P06NHUrVsXX19fAgMD6dKlC7t27cpyzsWLFxkwYABFihTBx8eHrl27cuLECYsqFhERubLC3m70jCzNr/3vZNn/NWdo6wqUC/QhKdXOnC3H6fvdOuqO+othv21h9YEz2O35+j5CrrH0jkzbtm158MEHqVu3Lqmpqbz00kts3bqV7du34+3tDUD//v2ZM2cOkyZNwt/fn4EDB+Lk5MSKFStu6DV0R0ZERKxiGAbbjsUzY8NRZm06RkxCUsaxEgGedKoRQpcaJagY7GthlXmTQ3YtnTx5ksDAQJYsWUKTJk2Ii4ujWLFiTJs2jfvuuw+AnTt3UqlSJVauXEmDBg2ue00FGRERyQvS7Aar9p9mxoajzN8aTcJ/BglHBPvSpWYJOlUPIUTr0wA3/v3tkos1XVdcnLnFeuHChQFYt24dKSkptGrVKuOciIgISpUqddUgk5SURFJSZuKNj4+/7BwREZHc5uxko2G5ojQsV5Q3ulRl0c4YZmw4yuJdMeyMTmDMvJ28PX8n9UoXpkvNErSvWhx/Lw0Svp48E2TsdjvPPvssDRs2pGrVqgBER0fj5uZGQEBAlnODgoKIjo6+4nVGjx7Na6+9ltPlioiI3DIPV2fa31Gc9ncUJ+58CnO3Hmf6hqOsPnCGf9MfI2duo3lEMbrUKEHziEA8XLU1wpXkmSAzYMAAtm7dyvLly2/rOsOGDWPw4MEZv8fHxxMaGnq75YmIiOQIfy9XutcrRfd6pTgae4FZG48xc+NRdkYnsGDbCRZsO4GvhwvtqgbTpUYJ6ocXwdlJKwlfkieCzMCBA/n9999ZunQpJUuWzGgPDg4mOTmZ2NjYLHdlTpw4QXBw8BWv5e7ujru7e06XLCIiku1KBHjSv1lZ+jcry87oeGZsOMasjUc5FneRn9Ye4ae1Rwjyc6dTdXMl4SohfgV+ewRLB/sahsGgQYOYPn06f//9N+XLl89y/NJg3++//56uXbsCsGvXLiIiIjTYV0RECgS73WD1wTPM3HiUOZuPE38xc5BwuUAfuqRvjxBa2MvCKrOfQ8xaeuqpp5g2bRozZ86kYsWKGe3+/v54epqjtvv378/cuXOZNGkSfn5+DBo0CIB//vnnhl5DQUZERPKLpNQ0/t51kpkbj/LXjhiSU+0Zx+qEFaJzzRJ0uKM4hb3dLKwyezhEkLna7bCJEyfSu3dvwFwQb8iQIXz//fckJSXRpk0bvvjii6t2Lf0vBRkREcmP4i+mMH9rNDM3HuWffae59G3u4mSjaYVidK5ZgrsqBeHp5piDhB0iyOQGBRkREcnvouMuMnvTMWZsPMq2Y5nLjni7OdOmSjCda5agYdkiuDg7zvYICjLpFGRERKQg2RuTwIwNx5i56ShRZy5ktBf1cefuasXpUrME1Uv65/lBwgoy6RRkRESkIDIMg/WHzzJjwzF+33yMs+dTMo6VKepN5/TtEUoX9bawyqtTkEmnICMiIgVdSpqdZXtOMn3DMf7cHs3FlMxBwtVDA+hSI4S7q4VQzDfvLF+iIJNOQUZERCTTuaRU/tgWzYyNx1i+5ySXNuG+tIVClxohtKkSjLe7tUvNKcikU5ARERG5spMJSfy++RgzNh5jU1RsRruHqxOtKwfTpWYIjcsXw9WCQcIKMukUZERERK7vwKlEZm48yowNRzl4+nxGe2FvNzrcUZwuNUOoVapQrg0SVpBJpyAjIiJy4wzDYNOROGZsOMrvm49x6lxyxrHQwp50rl6CLjVDKBfom6N1KMikU5ARERG5NalpdlbsO83MDUeZvy2a88lpGceqhPjRpUYJOtUIIcjPI9tfW0EmnYKMiIjI7TufnMqf208wc+Mxlu4+SWr6KGGbDd67rzpda5e8zhVuzo1+f+eJ3a9FREQkb/Nyc6FzjRJ0rlGCM4nJzEkfJLzu0FnqlC5kWV26IyMiIiK3LDruIsH+1nUtOc6mCyIiIpLn5ESIuRkKMiIiIuKwFGRERETEYSnIiIiIiMNSkBERERGHpSAjIiIiDktBRkRERByWgoyIiIg4LAUZERERcVgKMiIiIuKwFGRERETEYSnIiIiIiMNSkBERERGHpSAjIiIiDsvF6gJymmEYgLkduIiIiDiGS9/bl77HrybfB5mEhAQAQkNDLa5EREREblZCQgL+/v5XPW4zrhd1HJzdbufYsWP4+vpis9my7brx8fGEhoYSFRWFn59ftl3XkRT0z6Cgv3/QZ6D3X7DfP+gzyMn3bxgGCQkJhISE4OR09ZEw+f6OjJOTEyVLlsyx6/v5+RXIv7z/VdA/g4L+/kGfgd5/wX7/oM8gp97/te7EXKLBviIiIuKwFGRERETEYSnI3CJ3d3dGjhyJu7u71aVYpqB/BgX9/YM+A73/gv3+QZ9BXnj/+X6wr4iIiORfuiMjIiIiDktBRkRERByWgoyIiIg4LAUZERERcVgKMrfo888/p3Tp0nh4eFC/fn1Wr15tdUm5ZunSpXTs2JGQkBBsNhszZsywuqRcNXr0aOrWrYuvry+BgYF06dKFXbt2WV1Wrhk7dizVqlXLWAArMjKSefPmWV2WZcaMGYPNZuPZZ5+1upRc8+qrr2Kz2bI8IiIirC4rVx09epQePXpQpEgRPD09ueOOO1i7dq3VZeWa0qVLX/Z3wGazMWDAgFyvRUHmFvz4448MHjyYkSNHsn79eqpXr06bNm2IiYmxurRckZiYSPXq1fn888+tLsUSS5YsYcCAAaxatYo///yTlJQUWrduTWJiotWl5YqSJUsyZswY1q1bx9q1a2nRogWdO3dm27ZtVpeW69asWcO4ceOoVq2a1aXkuipVqnD8+PGMx/Lly60uKdecPXuWhg0b4urqyrx589i+fTvvv/8+hQoVsrq0XLNmzZosf/5//vknAPfff3/uF2PITatXr54xYMCAjN/T0tKMkJAQY/To0RZWZQ3AmD59utVlWComJsYAjCVLllhdimUKFSpkfP3111aXkasSEhKM8uXLG3/++afRtGlT45lnnrG6pFwzcuRIo3r16laXYZkXXnjBaNSokdVl5CnPPPOMUbZsWcNut+f6a+uOzE1KTk5m3bp1tGrVKqPNycmJVq1asXLlSgsrE6vExcUBULhwYYsryX1paWn88MMPJCYmEhkZaXU5uWrAgAF06NAhy78FBcmePXsICQkhPDychx9+mMOHD1tdUq6ZNWsWderU4f777ycwMJCaNWvy1VdfWV2WZZKTk5kyZQp9+vTJ1s2Zb5SCzE06deoUaWlpBAUFZWkPCgoiOjraoqrEKna7nWeffZaGDRtStWpVq8vJNVu2bMHHxwd3d3f69evH9OnTqVy5stVl5ZoffviB9evXM3r0aKtLsUT9+vWZNGkS8+fPZ+zYsRw4cIDGjRuTkJBgdWm5Yv/+/YwdO5by5cuzYMEC+vfvz9NPP823335rdWmWmDFjBrGxsfTu3duS18/3u1+L5KQBAwawdevWAjU+AKBixYps3LiRuLg4fvnlF3r16sWSJUsKRJiJiorimWee4c8//8TDw8PqcizRrl27jJ+rVatG/fr1CQsL46effuKxxx6zsLLcYbfbqVOnDm+99RYANWvWZOvWrXz55Zf06tXL4upy34QJE2jXrh0hISGWvL7uyNykokWL4uzszIkTJ7K0nzhxguDgYIuqEisMHDiQ33//ncWLF1OyZEmry8lVbm5ulCtXjtq1azN69GiqV6/Oxx9/bHVZuWLdunXExMRQq1YtXFxccHFxYcmSJXzyySe4uLiQlpZmdYm5LiAggAoVKrB3716rS8kVxYsXvyy0V6pUqUB1r11y6NAh/vrrLx5//HHLalCQuUlubm7Url2bhQsXZrTZ7XYWLlxY4MYIFFSGYTBw4ECmT5/OokWLKFOmjNUlWc5ut5OUlGR1GbmiZcuWbNmyhY0bN2Y86tSpw8MPP8zGjRtxdna2usRcd+7cOfbt20fx4sWtLiVXNGzY8LIlF3bv3k1YWJhFFVln4sSJBAYG0qFDB8tqUNfSLRg8eDC9evWiTp061KtXj48++ojExEQeffRRq0vLFefOncvyX14HDhxg48aNFC5cmFKlSllYWe4YMGAA06ZNY+bMmfj6+maMjfL398fT09Pi6nLesGHDaNeuHaVKlSIhIYFp06bx999/s2DBAqtLyxW+vr6XjYfy9vamSJEiBWac1NChQ+nYsSNhYWEcO3aMkSNH4uzsTPfu3a0uLVc899xz3Hnnnbz11lt069aN1atXM378eMaPH291abnKbrczceJEevXqhYuLhXEi1+dJ5ROffvqpUapUKcPNzc2oV6+esWrVKqtLyjWLFy82gMsevXr1srq0XHGl9w4YEydOtLq0XNGnTx8jLCzMcHNzM4oVK2a0bNnS+OOPP6wuy1IFbfr1Aw88YBQvXtxwc3MzSpQoYTzwwAPG3r17rS4rV82ePduoWrWq4e7ubkRERBjjx4+3uqRct2DBAgMwdu3aZWkdNsMwDGsilIiIiMjt0RgZERERcVgKMiIiIuKwFGRERETEYSnIiIiIiMNSkBERERGHpSAjIiIiDktBRkRERByWgoyIFDg2m40ZM2ZYXYaIZAMFGRHJVb1798Zms132aNu2rdWliYgD0l5LIpLr2rZty8SJE7O0ubu7W1SNiDgy3ZERkVzn7u5OcHBwlkehQoUAs9tn7NixtGvXDk9PT8LDw/nll1+yPH/Lli20aNECT09PihQpQt++fTl37lyWc7755huqVKmCu7s7xYsXZ+DAgVmOnzp1invuuQcvLy/Kly/PrFmzcvZNi0iOUJARkTznlVdeoWvXrmzatImHH36YBx98kB07dgCQmJhImzZtKFSoEGvWrOHnn3/mr7/+yhJUxo4dy4ABA+jbty9btmxh1qxZlCtXLstrvPbaa3Tr1o3NmzfTvn17Hn74Yc6cOZOr71NEsoGlW1aKSIHTq1cvw9nZ2fD29s7yGDVqlGEY5u7i/fr1y/Kc+vXrG/379zcMwzDGjx9vFCpUyDh37lzG8Tlz5hhOTk5GdHS0YRiGERISYgwfPvyqNQDGyy+/nPH7uXPnDMCYN29etr1PEckdGiMjIrmuefPmjB07Nktb4cKFM36OjIzMciwyMpKNGzcCsGPHDqpXr463t3fG8YYNG2K329m1axc2m41jx47RsmXLa9ZQrVq1jJ+9vb3x8/MjJibmVt+SiFhEQUZEcp23t/dlXT3ZxdPT84bOc3V1zfK7zWbDbrfnREkikoM0RkZE8pxVq1Zd9nulSpUAqFSpEps2bSIxMTHj+IoVK3BycqJixYr4+vpSunRpFi5cmKs1i4g1dEdGRHJdUlIS0dHRWdpcXFwoWrQoAD///DN16tShUaNGTJ06ldWrVzNhwgQAHn74YUaOHEmvXr149dVXOXnyJIMGDaJnz54EBQUB8Oqrr9KvXz8CAwNp164dCQkJrFixgkGDBuXuGxWRHKcgIyK5bv78+RQvXjxLW8WKFdm5cydgzij64YcfeOqppyhevDjff/89lStXBsDLy4sFCxbwzDPPULduXby8vOjatSsffPBBxrV69erFxYsX+fDDDxk6dChFixblvvvuy703KCK5xmYYhmF1ESIil9hsNqZPn06XLl2sLkVEHIDGyIiIiIjDUpARERERh6UxMiKSp6i3W0Ruhu7IiIiIiMNSkBERERGHpSAjIiIiDktBRkRERByWgoyIiIg4LAUZERERcVgKMiIiIuKwFGRERETEYSnIiIiIiMP6f2JoxWYIZDy0AAAAAElFTkSuQmCC",
+      "image/png": "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",
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -950,7 +850,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 50,
    "id": "ef623c26",
    "metadata": {},
    "outputs": [
@@ -958,16 +858,16 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "model:  fp32  \t Size (KB): 102523.238\n"
+      "model:  fp32  \t Size (KB): 2330.946\n"
      ]
     },
     {
      "data": {
       "text/plain": [
-       "102523238"
+       "2330946"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 50,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -997,7 +897,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 53,
    "id": "c4c65d4b",
    "metadata": {},
    "outputs": [
@@ -1014,7 +914,7 @@
        "659806"
       ]
      },
-     "execution_count": 35,
+     "execution_count": 53,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1027,6 +927,13 @@
     "print_size_of_model(quantized_model, \"int8\")"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The quantized model size is only 30% of the non quantized model size."
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "7b108e17",
@@ -1035,6 +942,13 @@
     "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": "markdown",
+   "metadata": {},
+   "source": [
+    "# Answers"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -1044,7 +958,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 72,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1181,7 +1095,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 73,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1223,6 +1137,13 @@
     "plt.xticks(rotation = 45)\n"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The accuracy of quantized and non quantized models are almost the same for all the classes."
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "a0a34b90",
@@ -1231,6 +1152,115 @@
     "Try training aware quantization to mitigate the impact on the accuracy (doc available here https://pytorch.org/docs/stable/quantization.html#torch.quantization.quantize_dynamic)"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To train an aware quantized model, the model is trained from the start with quantized weigths and activations, instead of converting them post training. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 78,
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "IndexError",
+     "evalue": "Target 7 is out of bounds.",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[1;31mIndexError\u001b[0m                                Traceback (most recent call last)",
+      "\u001b[1;32mc:\\Users\\oscar\\Documents\\GitHub\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 42\u001b[0m line \u001b[0;36m3\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y164sZmlsZQ%3D%3D?line=30'>31</a>\u001b[0m output \u001b[39m=\u001b[39m quantized_model(data)\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y164sZmlsZQ%3D%3D?line=31'>32</a>\u001b[0m \u001b[39m# Calculate the batch loss\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y164sZmlsZQ%3D%3D?line=32'>33</a>\u001b[0m loss \u001b[39m=\u001b[39m criterion(output, target)\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y164sZmlsZQ%3D%3D?line=33'>34</a>\u001b[0m \u001b[39m# Backward pass: compute gradient of the loss with respect to model parameters\u001b[39;00m\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y164sZmlsZQ%3D%3D?line=34'>35</a>\u001b[0m loss\u001b[39m.\u001b[39mbackward()\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1516\u001b[0m     \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_compiled_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)  \u001b[39m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m   1517\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1518\u001b[0m     \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_call_impl(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1522\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m   1523\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m   1524\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m   1525\u001b[0m         \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m   1526\u001b[0m         \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1527\u001b[0m     \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[0;32m   1529\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m   1530\u001b[0m     result \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\nn\\modules\\loss.py:1179\u001b[0m, in \u001b[0;36mCrossEntropyLoss.forward\u001b[1;34m(self, input, target)\u001b[0m\n\u001b[0;32m   1178\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39minput\u001b[39m: Tensor, target: Tensor) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Tensor:\n\u001b[1;32m-> 1179\u001b[0m     \u001b[39mreturn\u001b[39;00m F\u001b[39m.\u001b[39;49mcross_entropy(\u001b[39minput\u001b[39;49m, target, weight\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mweight,\n\u001b[0;32m   1180\u001b[0m                            ignore_index\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mignore_index, reduction\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mreduction,\n\u001b[0;32m   1181\u001b[0m                            label_smoothing\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mlabel_smoothing)\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\nn\\functional.py:3053\u001b[0m, in \u001b[0;36mcross_entropy\u001b[1;34m(input, target, weight, size_average, ignore_index, reduce, reduction, label_smoothing)\u001b[0m\n\u001b[0;32m   3051\u001b[0m \u001b[39mif\u001b[39;00m size_average \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m reduce \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m   3052\u001b[0m     reduction \u001b[39m=\u001b[39m _Reduction\u001b[39m.\u001b[39mlegacy_get_string(size_average, reduce)\n\u001b[1;32m-> 3053\u001b[0m \u001b[39mreturn\u001b[39;00m torch\u001b[39m.\u001b[39;49m_C\u001b[39m.\u001b[39;49m_nn\u001b[39m.\u001b[39;49mcross_entropy_loss(\u001b[39minput\u001b[39;49m, target, weight, _Reduction\u001b[39m.\u001b[39;49mget_enum(reduction), ignore_index, label_smoothing)\n",
+      "\u001b[1;31mIndexError\u001b[0m: Target 7 is out of bounds."
+     ]
+    }
+   ],
+   "source": [
+    "import torch.optim as optim\n",
+    "\n",
+    "# Apply quantization to the model\n",
+    "quantized_model = torch.quantization.quantize_dynamic(\n",
+    "    model, {torch.nn.Linear}, dtype=torch.qint8\n",
+    ")\n",
+    "\n",
+    "# Prepare the quantized model for training\n",
+    "quantized_model.train()\n",
+    "criterion = nn.CrossEntropyLoss()  # specify loss function\n",
+    "optimizer = optim.SGD(model.parameters(), lr=0.01)  # specify optimizer\n",
+    "\n",
+    "n_epochs = 30  # number of epochs to train the model\n",
+    "train_loss_list2 = []  # 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",
+    "    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 quantized outputs by passing inputs to the model\n",
+    "        output = quantized_model(data)\n",
+    "        # Calculate the batch loss\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",
+    "    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 = quantized_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_list2.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_CNN2.pt\") # the model is saved under a new name, so it does not erase the former model version\n",
+    "        valid_loss_min = valid_loss\n",
+    "    # break stops the loop when the validation loss increase. i.e when overfit occures. No need to calculate the models with higher number of epoch\n",
+    "    else : \n",
+    "        n_epochs2 = epoch + 1 # the number of epoch is updated\n",
+    "        break "
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "201470f9",
@@ -1244,7 +1274,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 64,
+   "execution_count": null,
    "id": "b4d13080",
    "metadata": {},
    "outputs": [
@@ -1360,7 +1390,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1388,7 +1418,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 44,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1431,7 +1461,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 65,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1536,7 +1566,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
+   "execution_count": null,
    "id": "be2d31f5",
    "metadata": {},
    "outputs": [
@@ -1639,7 +1669,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 86,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -1671,78 +1701,66 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 98,
+   "execution_count": 12,
    "id": "572d824c",
    "metadata": {},
    "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n",
-      "  warnings.warn(msg)\n",
-      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:136: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate\n",
-      "  warnings.warn(\"Detected call of `lr_scheduler.step()` before `optimizer.step()`. \"\n"
-     ]
-    },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "Epoch 1/10\n",
       "----------\n",
-      "train Loss: 2.143089 Acc: 2.901639\n",
-      "val Loss: 1.074714 Acc: 3.684211\n",
+      "train Loss: 0.6401 Acc: 0.6762\n",
+      "val Loss: 0.2012 Acc: 0.9281\n",
       "\n",
       "Epoch 2/10\n",
       "----------\n",
-      "train Loss: 2.224947 Acc: 2.918033\n",
-      "val Loss: 1.836422 Acc: 3.105263\n",
+      "train Loss: 0.5044 Acc: 0.7623\n",
+      "val Loss: 0.2007 Acc: 0.9150\n",
       "\n",
       "Epoch 3/10\n",
       "----------\n",
-      "train Loss: 2.568049 Acc: 2.934426\n",
-      "val Loss: 2.973148 Acc: 2.947368\n",
+      "train Loss: 0.3884 Acc: 0.8402\n",
+      "val Loss: 0.1613 Acc: 0.9542\n",
       "\n",
       "Epoch 4/10\n",
       "----------\n",
-      "train Loss: 2.096981 Acc: 3.032787\n",
-      "val Loss: 0.979872 Acc: 3.684211\n",
+      "train Loss: 0.4510 Acc: 0.7951\n",
+      "val Loss: 0.2282 Acc: 0.9020\n",
       "\n",
       "Epoch 5/10\n",
       "----------\n",
-      "train Loss: 2.538738 Acc: 3.000000\n",
-      "val Loss: 1.499090 Acc: 3.263158\n",
+      "train Loss: 0.2954 Acc: 0.8770\n",
+      "val Loss: 0.1684 Acc: 0.9542\n",
       "\n",
       "Epoch 6/10\n",
       "----------\n",
-      "train Loss: 1.660988 Acc: 3.262295\n",
-      "val Loss: 1.821073 Acc: 3.263158\n",
+      "train Loss: 0.4508 Acc: 0.8156\n",
+      "val Loss: 0.3445 Acc: 0.8758\n",
       "\n",
       "Epoch 7/10\n",
       "----------\n",
-      "train Loss: 1.710175 Acc: 3.327869\n",
-      "val Loss: 0.986354 Acc: 3.684211\n",
+      "train Loss: 0.3765 Acc: 0.8525\n",
+      "val Loss: 0.1578 Acc: 0.9477\n",
       "\n",
       "Epoch 8/10\n",
       "----------\n",
-      "train Loss: 1.508976 Acc: 3.360656\n",
-      "val Loss: 0.930342 Acc: 3.684211\n",
+      "train Loss: 0.4848 Acc: 0.8033\n",
+      "val Loss: 0.1816 Acc: 0.9477\n",
       "\n",
       "Epoch 9/10\n",
       "----------\n",
-      "train Loss: 1.376158 Acc: 3.377049\n",
-      "val Loss: 0.857926 Acc: 3.684211\n",
+      "train Loss: 0.3977 Acc: 0.8197\n",
+      "val Loss: 0.1772 Acc: 0.9542\n",
       "\n",
       "Epoch 10/10\n",
       "----------\n",
-      "train Loss: 1.527386 Acc: 3.344262\n",
-      "val Loss: 1.063644 Acc: 3.684211\n",
+      "train Loss: 0.2890 Acc: 0.8730\n",
+      "val Loss: 0.1714 Acc: 0.9608\n",
       "\n",
-      "Training complete in 1m 47s\n",
-      "Best val Acc: 3.684211\n"
+      "Training complete in 4m 8s\n",
+      "Best val Acc: 0.960784\n"
      ]
     }
    ],
@@ -1759,7 +1777,6 @@
     "import torchvision\n",
     "from torch.optim import lr_scheduler\n",
     "from torchvision import datasets, transforms\n",
-    "from sklearn.model_selection import train_test_split\n",
     "\n",
     "# Data augmentation and normalization for training\n",
     "# Just normalization for validation\n",
@@ -1787,19 +1804,19 @@
     "}\n",
     "\n",
     "data_dir = \"data/hymenoptera_data\"\n",
-    "# Create train, validation and test datasets and loaders\n",
-    "\n",
-    "train_dataset = datasets.ImageFolder(os.path.join(data_dir, \"train\"), data_transforms[\"train\"])\n",
-    "val_dataset = datasets.ImageFolder(os.path.join(data_dir, \"val\"), data_transforms[\"val\"])\n",
-    "test_dataset = val_dataset, test_dataset = train_test_split(val_dataset, test_size=0.5, random_state=42) # validation set in splitted into two sets\n",
     "\n",
+    "# Create train and validation datasets and loaders\n",
+    "image_datasets = {\n",
+    "    x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x])\n",
+    "    for x in [\"train\", \"val\"]\n",
+    "}\n",
     "dataloaders = {\n",
-    "    \"train\": torch.utils.data.DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
-    "    \"val\": torch.utils.data.DataLoader(val_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
-    "    \"test\": torch.utils.data.DataLoader(test_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
+    "    x: torch.utils.data.DataLoader(\n",
+    "        image_datasets[x], batch_size=4, shuffle=True, num_workers=4\n",
+    "    )\n",
+    "    for x in [\"train\", \"val\"]\n",
     "}\n",
-    "\n",
-    "dataset_sizes = {x: len(dataloaders[x]) for x in [\"train\", \"val\", \"test\"]}\n",
+    "dataset_sizes = {x: len(image_datasets[x]) for x in [\"train\", \"val\"]}\n",
     "class_names = image_datasets[\"train\"].classes\n",
     "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
     "\n",
@@ -1882,7 +1899,7 @@
     "            epoch_loss = running_loss / dataset_sizes[phase]\n",
     "            epoch_acc = running_corrects.double() / dataset_sizes[phase]\n",
     "\n",
-    "            print(\"{} Loss: {:.6f} Acc: {:.6f}\".format(phase, epoch_loss, epoch_acc))\n",
+    "            print(\"{} Loss: {:.4f} Acc: {:.4f}\".format(phase, epoch_loss, epoch_acc))\n",
     "\n",
     "            # Deep copy the model\n",
     "            if phase == \"val\" and epoch_acc > best_acc:\n",
@@ -1926,38 +1943,7 @@
     "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)\n",
     "model, epoch_time = train_model(\n",
     "    model, criterion, optimizer_conv, exp_lr_scheduler, num_epochs=10\n",
-    ")\n",
-    "\n",
-    "def eval_model(model, criterion) :\n",
-    "    phase = \"test\"\n",
-    "    model.eval() # set the model to evaluation mode\n",
-    "    running_loss = 0.0\n",
-    "    running_corrects = 0\n",
-    "    \n",
-    "    for inputs, labels in dataloaders[phase]:\n",
-    "        inputs = inputs.to(device)\n",
-    "        labels = labels.to(device)\n",
-    "\n",
-    "        # zero the parameter gradients\n",
-    "        optimizer.zero_grad()\n",
-    "\n",
-    "        with torch.set_grad_enabled(False) : # backpropagation and optimization disabled in evaluation phase\n",
-    "            outputs = model(inputs)\n",
-    "            _, preds = torch.max(outputs, 1)\n",
-    "            loss = criterion(outputs, labels)\n",
-    "\n",
-    "        running_loss += loss.item() * inputs.size(0)\n",
-    "        running_corrects += torch.sum(preds == labels.data)\n",
-    "\n",
-    "    eval_loss = running_loss / dataset_sizes[phase]\n",
-    "    eval_accuracy = running_corrects.double() / dataset_sizes[phase]\n",
-    "\n",
-    "    print(\"{} Loss: {:.6f} Acc: {:.6f}\".format(phase, eval_loss, eval_accuracy))\n",
-    "\n",
-    "    return \n",
-    "    \n",
-    "\n",
-    "\n"
+    ")\n"
    ]
   },
   {
@@ -1976,46 +1962,655 @@
     "Apply ther quantization (post and quantization aware) and evaluate impact on model size and accuracy."
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": 97,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "20"
-      ]
-     },
-     "execution_count": 97,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "len(dataloaders[\"val\"])\n",
-    "dataset_sizes[\"test\"]"
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Answers"
+    "# Answers"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The optimal number of epoch is 7. The accuracy value for 7 epochs during the validation phase is 0.954248."
+    "In the following code, the validation set provided is divided into two sets of equal size : a new validation set and a test set. The test set is used to calculate the final accuracy of the model, after training and validation on the train and val sets. \n",
+    "\n",
+    "The \"eval_model\" function uses the same accuracy computation as in the \"train_model\" function. The model loaded is the best model trained during training phase. Backpropagation and optimization are disabled because the model is set to evaluation mode. "
    ]
   },
   {
-   "cell_type": "markdown",
+   "cell_type": "code",
+   "execution_count": 10,
    "metadata": {},
-   "source": [
-    "CV ?"
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Training phase\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
+      "  warnings.warn(\n",
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n",
+      "  warnings.warn(msg)\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 1/10\n",
+      "----------\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:136: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate\n",
+      "  warnings.warn(\"Detected call of `lr_scheduler.step()` before `optimizer.step()`. \"\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "train Loss: 0.683926 Acc: 0.622951\n",
+      "val Loss: 0.263829 Acc: 0.857143\n",
+      "\n",
+      "Epoch 2/10\n",
+      "----------\n",
+      "train Loss: 0.548295 Acc: 0.737705\n",
+      "val Loss: 0.383360 Acc: 0.844156\n",
+      "\n",
+      "Epoch 3/10\n",
+      "----------\n",
+      "train Loss: 0.424116 Acc: 0.807377\n",
+      "val Loss: 0.254040 Acc: 0.909091\n",
+      "\n",
+      "Epoch 4/10\n",
+      "----------\n",
+      "train Loss: 0.546045 Acc: 0.766393\n",
+      "val Loss: 0.260233 Acc: 0.909091\n",
+      "\n",
+      "Epoch 5/10\n",
+      "----------\n",
+      "train Loss: 0.462518 Acc: 0.786885\n",
+      "val Loss: 0.288813 Acc: 0.870130\n",
+      "\n",
+      "Epoch 6/10\n",
+      "----------\n",
+      "train Loss: 0.690526 Acc: 0.750000\n",
+      "val Loss: 0.499446 Acc: 0.805195\n",
+      "\n",
+      "Epoch 7/10\n",
+      "----------\n",
+      "train Loss: 0.465076 Acc: 0.807377\n",
+      "val Loss: 0.296158 Acc: 0.857143\n",
+      "\n",
+      "Epoch 8/10\n",
+      "----------\n",
+      "train Loss: 0.342543 Acc: 0.836066\n",
+      "val Loss: 0.227600 Acc: 0.935065\n",
+      "\n",
+      "Epoch 9/10\n",
+      "----------\n",
+      "train Loss: 0.369008 Acc: 0.811475\n",
+      "val Loss: 0.236998 Acc: 0.935065\n",
+      "\n",
+      "Epoch 10/10\n",
+      "----------\n",
+      "train Loss: 0.357282 Acc: 0.840164\n",
+      "val Loss: 0.247927 Acc: 0.935065\n",
+      "\n",
+      "Training complete in 3m 35s\n",
+      "Best val Acc: 0.935065\n",
+      "Evaluation phase\n",
+      "test Loss: 0.088679 Acc: 0.973684\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.08867860195766154, tensor(0.9737, dtype=torch.float64))"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "import copy\n",
+    "import os\n",
+    "import time\n",
+    "\n",
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np\n",
+    "import torch\n",
+    "import torch.nn as nn\n",
+    "import torch.optim as optim\n",
+    "import torchvision\n",
+    "from torch.optim import lr_scheduler\n",
+    "from torchvision import datasets, transforms\n",
+    "from sklearn.model_selection import train_test_split\n",
+    "\n",
+    "# Data augmentation and normalization for training\n",
+    "# Just normalization for validation\n",
+    "data_transforms = {\n",
+    "    \"train\": transforms.Compose(\n",
+    "        [\n",
+    "            transforms.RandomResizedCrop(\n",
+    "                224\n",
+    "            ),  # ImageNet models were trained on 224x224 images\n",
+    "            transforms.RandomHorizontalFlip(),  # flip horizontally 50% of the time - increases train set variability\n",
+    "            transforms.ToTensor(),  # convert it to a PyTorch tensor\n",
+    "            transforms.Normalize(\n",
+    "                [0.485, 0.456, 0.406], [0.229, 0.224, 0.225]\n",
+    "            ),  # ImageNet models expect this norm\n",
+    "        ]\n",
+    "    ),\n",
+    "    \"val\": transforms.Compose(\n",
+    "        [\n",
+    "            transforms.Resize(256),\n",
+    "            transforms.CenterCrop(224),\n",
+    "            transforms.ToTensor(),\n",
+    "            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
+    "        ]\n",
+    "    ),\n",
+    "}\n",
+    "\n",
+    "data_dir = \"data/hymenoptera_data\"\n",
+    "# Create train, validation and test datasets and loaders\n",
+    "\n",
+    "train_dataset = datasets.ImageFolder(os.path.join(data_dir, \"train\"), data_transforms[\"train\"])\n",
+    "val_dataset = datasets.ImageFolder(os.path.join(data_dir, \"val\"), data_transforms[\"val\"])\n",
+    "\n",
+    "val_size = len(val_dataset)\n",
+    "test_size = int(0.5 * val_size)\n",
+    "val_dataset, test_dataset = train_test_split(val_dataset, test_size = test_size, random_state = 42) # validation set in splitted into two sets\n",
+    "\n",
+    "image_datasets = {\n",
+    "    \"train\" : train_dataset,\n",
+    "    \"val\" : val_dataset,\n",
+    "    \"test\" : test_dataset,\n",
+    "}\n",
+    "\n",
+    "dataloaders = {\n",
+    "    \"train\": torch.utils.data.DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
+    "    \"val\": torch.utils.data.DataLoader(val_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
+    "    \"test\": torch.utils.data.DataLoader(test_dataset, batch_size=4, shuffle=True, num_workers=4),\n",
+    "}\n",
+    "\n",
+    "dataset_sizes = {x: len(image_datasets[x]) for x in [\"train\", \"val\", \"test\"]}\n",
+    "class_names = image_datasets[\"train\"].classes\n",
+    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
+    "\n",
+    "# Helper function for displaying images\n",
+    "def imshow(inp, title=None):\n",
+    "    \"\"\"Imshow for Tensor.\"\"\"\n",
+    "    inp = inp.numpy().transpose((1, 2, 0))\n",
+    "    mean = np.array([0.485, 0.456, 0.406])\n",
+    "    std = np.array([0.229, 0.224, 0.225])\n",
+    "\n",
+    "    # Un-normalize the images\n",
+    "    inp = std * inp + mean\n",
+    "    # Clip just in case\n",
+    "    inp = np.clip(inp, 0, 1)\n",
+    "    plt.imshow(inp)\n",
+    "    if title is not None:\n",
+    "        plt.title(title)\n",
+    "    plt.pause(0.001)  # pause a bit so that plots are updated\n",
+    "    plt.show()\n",
+    "\n",
+    "\n",
+    "# Get a batch of training data\n",
+    "# inputs, classes = next(iter(dataloaders['train']))\n",
+    "\n",
+    "# Make a grid from batch\n",
+    "# out = torchvision.utils.make_grid(inputs)\n",
+    "\n",
+    "# imshow(out, title=[class_names[x] for x in classes])\n",
+    "# training phase \n",
+    "print(\"Training phase\")\n",
+    "\n",
+    "def train_model(model, criterion, optimizer, scheduler, num_epochs=25):\n",
+    "    since = time.time()\n",
+    "\n",
+    "    best_model_wts = copy.deepcopy(model.state_dict())\n",
+    "    best_acc = 0.0\n",
+    "\n",
+    "    epoch_time = []  # we'll keep track of the time needed for each epoch\n",
+    "\n",
+    "    for epoch in range(num_epochs):\n",
+    "        epoch_start = time.time()\n",
+    "        print(\"Epoch {}/{}\".format(epoch + 1, num_epochs))\n",
+    "        print(\"-\" * 10)\n",
+    "\n",
+    "        # Each epoch has a training and validation phase\n",
+    "        for phase in [\"train\", \"val\"]:\n",
+    "            if phase == \"train\":\n",
+    "                scheduler.step()\n",
+    "                model.train()  # Set model to training mode\n",
+    "            else:\n",
+    "                model.eval()  # Set model to evaluate mode\n",
+    "\n",
+    "            running_loss = 0.0\n",
+    "            running_corrects = 0\n",
+    "\n",
+    "            # Iterate over data.\n",
+    "            for inputs, labels in dataloaders[phase]:\n",
+    "                inputs = inputs.to(device)\n",
+    "                labels = labels.to(device)\n",
+    "\n",
+    "                # zero the parameter gradients\n",
+    "                optimizer.zero_grad()\n",
+    "\n",
+    "                # Forward\n",
+    "                # Track history if only in training phase\n",
+    "                with torch.set_grad_enabled(phase == \"train\"):\n",
+    "                    outputs = model(inputs)\n",
+    "                    _, preds = torch.max(outputs, 1)\n",
+    "                    loss = criterion(outputs, labels)\n",
+    "\n",
+    "                    # backward + optimize only if in training phase\n",
+    "                    if phase == \"train\":\n",
+    "                        loss.backward()\n",
+    "                        optimizer.step()\n",
+    "\n",
+    "                # Statistics\n",
+    "                running_loss += loss.item() * inputs.size(0)\n",
+    "                running_corrects += torch.sum(preds == labels.data)\n",
+    "\n",
+    "            epoch_loss = running_loss / dataset_sizes[phase]\n",
+    "            epoch_acc = running_corrects.double() / dataset_sizes[phase]\n",
+    "            print(\"{} Loss: {:.6f} Acc: {:.6f}\".format(phase, epoch_loss, epoch_acc))\n",
+    "\n",
+    "            # Deep copy the model\n",
+    "            if phase == \"val\" and epoch_acc > best_acc:\n",
+    "                best_acc = epoch_acc\n",
+    "                best_model_wts = copy.deepcopy(model.state_dict())\n",
+    "\n",
+    "        # Add the epoch time\n",
+    "        t_epoch = time.time() - epoch_start\n",
+    "        epoch_time.append(t_epoch)\n",
+    "        print()\n",
+    "\n",
+    "    time_elapsed = time.time() - since\n",
+    "    print(\n",
+    "        \"Training complete in {:.0f}m {:.0f}s\".format(\n",
+    "            time_elapsed // 60, time_elapsed % 60\n",
+    "        )\n",
+    "    )\n",
+    "    print(\"Best val Acc: {:4f}\".format(best_acc))\n",
+    "\n",
+    "    # Load best model weights\n",
+    "    model.load_state_dict(best_model_wts)\n",
+    "    return model, epoch_time\n",
+    "\n",
+    "\n",
+    "# Download a pre-trained ResNet18 model and freeze its weights\n",
+    "model = torchvision.models.resnet18(pretrained=True)\n",
+    "for param in model.parameters():\n",
+    "    param.requires_grad = False\n",
+    "\n",
+    "# Replace the final fully connected layer\n",
+    "# Parameters of newly constructed modules have requires_grad=True by default\n",
+    "num_ftrs = model.fc.in_features\n",
+    "model.fc = nn.Linear(num_ftrs, 2)\n",
+    "# Send the model to the GPU\n",
+    "model = model.to(device)\n",
+    "# Set the loss function\n",
+    "criterion = nn.CrossEntropyLoss()\n",
+    "\n",
+    "# Observe that only the parameters of the final layer are being optimized\n",
+    "optimizer_conv = optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)\n",
+    "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)\n",
+    "model, epoch_time = train_model(\n",
+    "    model, criterion, optimizer_conv, exp_lr_scheduler, num_epochs=10\n",
+    ")\n",
+    "\n",
+    "def eval_model(model, criterion) :\n",
+    "    phase = \"test\"\n",
+    "    model.eval() # set the model to evaluation mode\n",
+    "    running_loss = 0.0\n",
+    "    running_corrects = 0\n",
+    "    \n",
+    "    for inputs, labels in dataloaders[phase]:\n",
+    "        inputs = inputs.to(device)\n",
+    "        labels = labels.to(device)\n",
+    "\n",
+    "        with torch.set_grad_enabled(False) : # backpropagation and optimization disabled in evaluation phase\n",
+    "            outputs = model(inputs)\n",
+    "            _, preds = torch.max(outputs, 1)\n",
+    "            loss = criterion(outputs, labels)\n",
+    "\n",
+    "        running_loss += loss.item() * inputs.size(0)\n",
+    "        running_corrects += torch.sum(preds == labels.data)\n",
+    "\n",
+    "    eval_loss = running_loss / dataset_sizes[phase]\n",
+    "    eval_accuracy = running_corrects.double() / dataset_sizes[phase]\n",
+    "\n",
+    "    print(\"{} Loss: {:.6f} Acc: {:.6f}\".format(phase, eval_loss, eval_accuracy))\n",
+    "    \n",
+    "    return(eval_loss, eval_accuracy)\n",
+    "\n",
+    "# evaluation phase\n",
+    "print(\"Evaluation phase\")\n",
+    "eval_model(model, criterion)\n",
+    "    \n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The current classififcation layer is replaced by a set of two layers. To creates these layers, the model layers are freezed.\n",
+    "After a few tests with different dropout probabilities, 40% of the neurones (nodes) are dropped at each layer. This dropout limits the model overfitting."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
+      "  warnings.warn(\n",
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n",
+      "  warnings.warn(msg)\n",
+      "c:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:136: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate\n",
+      "  warnings.warn(\"Detected call of `lr_scheduler.step()` before `optimizer.step()`. \"\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Training phase\n",
+      "Epoch 1/10\n",
+      "----------\n",
+      "train Loss: 0.674923 Acc: 0.577869\n",
+      "val Loss: 0.458782 Acc: 0.896104\n",
+      "\n",
+      "Epoch 2/10\n",
+      "----------\n",
+      "train Loss: 0.583720 Acc: 0.692623\n",
+      "val Loss: 0.362293 Acc: 0.857143\n",
+      "\n",
+      "Epoch 3/10\n",
+      "----------\n",
+      "train Loss: 0.529133 Acc: 0.733607\n",
+      "val Loss: 0.310613 Acc: 0.909091\n",
+      "\n",
+      "Epoch 4/10\n",
+      "----------\n",
+      "train Loss: 0.534250 Acc: 0.741803\n",
+      "val Loss: 0.320776 Acc: 0.883117\n",
+      "\n",
+      "Epoch 5/10\n",
+      "----------\n",
+      "train Loss: 0.538945 Acc: 0.770492\n",
+      "val Loss: 0.273883 Acc: 0.909091\n",
+      "\n",
+      "Epoch 6/10\n",
+      "----------\n",
+      "train Loss: 0.467614 Acc: 0.790984\n",
+      "val Loss: 0.256834 Acc: 0.909091\n",
+      "\n",
+      "Epoch 7/10\n",
+      "----------\n",
+      "train Loss: 0.474842 Acc: 0.770492\n",
+      "val Loss: 0.256740 Acc: 0.935065\n",
+      "\n",
+      "Epoch 8/10\n",
+      "----------\n",
+      "train Loss: 0.459517 Acc: 0.786885\n",
+      "val Loss: 0.281072 Acc: 0.909091\n",
+      "\n",
+      "Epoch 9/10\n",
+      "----------\n",
+      "train Loss: 0.463170 Acc: 0.758197\n",
+      "val Loss: 0.252669 Acc: 0.935065\n",
+      "\n",
+      "Epoch 10/10\n",
+      "----------\n",
+      "train Loss: 0.430820 Acc: 0.766393\n",
+      "val Loss: 0.271750 Acc: 0.909091\n",
+      "\n",
+      "Training complete in 1m 51s\n",
+      "Best val Acc: 0.935065\n",
+      "Evaluation phase\n",
+      "test Loss: 0.189794 Acc: 0.960526\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.18979360339672943, tensor(0.9605, dtype=torch.float64))"
+      ]
+     },
+     "execution_count": 54,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Download a pre-trained ResNet18 model and freeze its weights\n",
+    "model = torchvision.models.resnet18(pretrained=True)\n",
+    "for param in model.parameters():\n",
+    "    param.requires_grad = False\n",
+    "\n",
+    "# Replace the final fully connected layer\n",
+    "# Parameters of newly constructed modules have requires_grad=True by default\n",
+    "num_ftrs = model.fc.in_features\n",
+    "model.fc = nn.Linear(num_ftrs, 2)\n",
+    "\n",
+    "# Freeze all layers of the pre-trained model\n",
+    "for param in model.parameters():\n",
+    "    param.requires_grad = False\n",
+    "# Replace the final fully connected layer with two layers, ReLU, and dropout\n",
+    "dropout_prob = 0.4\n",
+    "model.features = nn.Sequential(*list(model.children())[:-2])\n",
+    "model.fc = nn.Sequential(\n",
+    "        nn.Flatten(),\n",
+    "        nn.Dropout(p = dropout_prob), #first dropout \n",
+    "        nn.Linear(model.fc.in_features, int(dropout_prob * num_ftrs)), # first layer\n",
+    "        nn.ReLU(), #ReLU activation\n",
+    "        nn.Dropout(p = dropout_prob), # second dropout\n",
+    "        nn.Linear(int(dropout_prob * num_ftrs), 2), # second layer \n",
+    "    )\n",
+    "\n",
+    "# Send the model to the GPU\n",
+    "model = model.to(device)\n",
+    "# Set the loss function\n",
+    "criterion = nn.CrossEntropyLoss()\n",
+    "\n",
+    "# training phase\n",
+    "print(\"Training phase\")\n",
+    "\n",
+    "# Observe that only the parameters of the final layer are being optimized\n",
+    "optimizer_conv = optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)\n",
+    "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)\n",
+    "model, epoch_time = train_model(\n",
+    "    model, criterion, optimizer_conv, exp_lr_scheduler, num_epochs=10\n",
+    ")\n",
+    "\n",
+    "# evaluation phase\n",
+    "print(\"Evaluation phase\")\n",
+    "eval_model(model, criterion)\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The test score is the same as the test score of the previous model, but there are less neurones in this model, therefore it is considered better."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Apply the quantization (post and quantization aware) and evaluate impact on model size and accuracy."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 63,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "model:  fp32  \t Size (KB): 45212.218\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "45212218"
+      ]
+     },
+     "execution_count": 63,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "print_size_of_model(model, \"fp32\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 64,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "model:  int8  \t Size (KB): 44899.11\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "44899110"
+      ]
+     },
+     "execution_count": 64,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# quantization\n",
+    "quantized_modelResnet = torch.quantization.quantize_dynamic(model, dtype=torch.qint8)\n",
+    "print_size_of_model(quantized_modelResnet, \"int8\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The size of the quantized model is almost the same as the size of the non quantized one."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 68,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Evaluation phase\n",
+      "test Loss: 0.185476 Acc: 0.960526\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.18547590096530162, tensor(0.9605, dtype=torch.float64))"
+      ]
+     },
+     "execution_count": 68,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# evaluation phase\n",
+    "print(\"Evaluation phase\")\n",
+    "eval_model(quantized_modelResnet, criterion)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The accuracy of the quantized model is the same as the accuracy of the non quantized model."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Lets try the quantization aware. The model is trained from the start with quantized weigths and activations, instead of converting them post training. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 72,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 1/10\n",
+      "----------\n"
+     ]
+    },
+    {
+     "ename": "RuntimeError",
+     "evalue": "element 0 of tensors does not require grad and does not have a grad_fn",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[1;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
+      "\u001b[1;32mc:\\Users\\oscar\\Documents\\GitHub\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 69\u001b[0m line \u001b[0;36m8\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m optimizer_conv \u001b[39m=\u001b[39m optim\u001b[39m.\u001b[39mSGD(awareQuantized_model\u001b[39m.\u001b[39mparameters(), lr\u001b[39m=\u001b[39m\u001b[39m0.001\u001b[39m, momentum\u001b[39m=\u001b[39m\u001b[39m0.9\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=6'>7</a>\u001b[0m exp_lr_scheduler \u001b[39m=\u001b[39m lr_scheduler\u001b[39m.\u001b[39mStepLR(optimizer_conv, step_size\u001b[39m=\u001b[39m\u001b[39m7\u001b[39m, gamma\u001b[39m=\u001b[39m\u001b[39m0.1\u001b[39m)\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m awareQuantized_model, epoch_time \u001b[39m=\u001b[39m train_model(\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=8'>9</a>\u001b[0m     awareQuantized_model, criterion, optimizer_conv, exp_lr_scheduler, num_epochs\u001b[39m=\u001b[39;49m\u001b[39m10\u001b[39;49m\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=9'>10</a>\u001b[0m )\n",
+      "\u001b[1;32mc:\\Users\\oscar\\Documents\\GitHub\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 69\u001b[0m line \u001b[0;36m1\n\u001b[0;32m    <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=130'>131</a>\u001b[0m     \u001b[39m# backward + optimize only if in training phase\u001b[39;00m\n\u001b[0;32m    <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=131'>132</a>\u001b[0m     \u001b[39mif\u001b[39;00m phase \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mtrain\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[1;32m--> <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=132'>133</a>\u001b[0m         loss\u001b[39m.\u001b[39;49mbackward()\n\u001b[0;32m    <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=133'>134</a>\u001b[0m         optimizer\u001b[39m.\u001b[39mstep()\n\u001b[0;32m    <a href='vscode-notebook-cell:/c%3A/Users/oscar/Documents/GitHub/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#Y162sZmlsZQ%3D%3D?line=135'>136</a>\u001b[0m \u001b[39m# Statistics\u001b[39;00m\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\_tensor.py:492\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m    482\u001b[0m \u001b[39mif\u001b[39;00m has_torch_function_unary(\u001b[39mself\u001b[39m):\n\u001b[0;32m    483\u001b[0m     \u001b[39mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m    484\u001b[0m         Tensor\u001b[39m.\u001b[39mbackward,\n\u001b[0;32m    485\u001b[0m         (\u001b[39mself\u001b[39m,),\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    490\u001b[0m         inputs\u001b[39m=\u001b[39minputs,\n\u001b[0;32m    491\u001b[0m     )\n\u001b[1;32m--> 492\u001b[0m torch\u001b[39m.\u001b[39;49mautograd\u001b[39m.\u001b[39;49mbackward(\n\u001b[0;32m    493\u001b[0m     \u001b[39mself\u001b[39;49m, gradient, retain_graph, create_graph, inputs\u001b[39m=\u001b[39;49minputs\n\u001b[0;32m    494\u001b[0m )\n",
+      "File \u001b[1;32mc:\\Users\\oscar\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\torch\\autograd\\__init__.py:251\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m    246\u001b[0m     retain_graph \u001b[39m=\u001b[39m create_graph\n\u001b[0;32m    248\u001b[0m \u001b[39m# The reason we repeat the same comment below is that\u001b[39;00m\n\u001b[0;32m    249\u001b[0m \u001b[39m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m    250\u001b[0m \u001b[39m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 251\u001b[0m Variable\u001b[39m.\u001b[39;49m_execution_engine\u001b[39m.\u001b[39;49mrun_backward(  \u001b[39m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[0;32m    252\u001b[0m     tensors,\n\u001b[0;32m    253\u001b[0m     grad_tensors_,\n\u001b[0;32m    254\u001b[0m     retain_graph,\n\u001b[0;32m    255\u001b[0m     create_graph,\n\u001b[0;32m    256\u001b[0m     inputs,\n\u001b[0;32m    257\u001b[0m     allow_unreachable\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m,\n\u001b[0;32m    258\u001b[0m     accumulate_grad\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m,\n\u001b[0;32m    259\u001b[0m )\n",
+      "\u001b[1;31mRuntimeError\u001b[0m: element 0 of tensors does not require grad and does not have a grad_fn"
+     ]
+    }
+   ],
+   "source": [
+    "# Perform quantization-aware training\n",
+    "awareQuantized_model = torch.quantization.quantize_dynamic(\n",
+    "    model, {torch.nn.Linear}, dtype=torch.qint8\n",
+    ")\n",
+    "criterion = torch.nn.CrossEntropyLoss()\n",
+    "optimizer_conv = optim.SGD(awareQuantized_model.parameters(), lr=0.001, momentum=0.9)\n",
+    "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)\n",
+    "awareQuantized_model, epoch_time = train_model(\n",
+    "    awareQuantized_model, criterion, optimizer_conv, exp_lr_scheduler, num_epochs=10\n",
+    ")"
    ]
   },
   {