From 42c6c2e8bfedc36cf283a9191044468bd8124ca8 Mon Sep 17 00:00:00 2001 From: Bdarne <basile.darne@ecl20.ec-lyon.fr> Date: Fri, 1 Dec 2023 20:33:45 +0100 Subject: [PATCH] update 01/12/23 --- TD2 Deep Learning.ipynb | 618 +++++++++++++----- hymenoptera_data/train/ants/formica.jpeg | Bin 0 -> 7858 bytes hymenoptera_data/train/ants/imageNotFound.gif | Bin 0 -> 5504 bytes results/model2_accuracy.PNG | Bin 0 -> 22303 bytes 4 files changed, 440 insertions(+), 178 deletions(-) create mode 100644 hymenoptera_data/train/ants/formica.jpeg create mode 100644 hymenoptera_data/train/ants/imageNotFound.gif create mode 100644 results/model2_accuracy.PNG diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb index 6c833bc..21d7c9f 100644 --- a/TD2 Deep Learning.ipynb +++ b/TD2 Deep Learning.ipynb @@ -33,10 +33,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "330a42f5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: torch in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (1.13.1)\n", + "Requirement already satisfied: torchvision in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (0.14.1)\n", + "Requirement already satisfied: typing-extensions in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from torch) (4.4.0)\n", + "Requirement already satisfied: numpy in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from torchvision) (1.24.2)\n", + "Requirement already satisfied: requests in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from torchvision) (2.28.2)\n", + "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from torchvision) (9.4.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->torchvision) (3.0.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->torchvision) (3.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->torchvision) (2022.12.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\basil\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->torchvision) (1.26.14)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "[notice] A new release of pip is available: 23.0.1 -> 23.3.1\n", + "[notice] To update, run: python.exe -m pip install --upgrade pip\n" + ] + } + ], "source": [ "%pip install torch torchvision" ] @@ -52,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "b1950f0a", "metadata": {}, "outputs": [ @@ -60,34 +87,34 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[-2.0332e-01, 6.5762e-01, -1.2718e+00, -1.0667e+00, 6.3339e-01,\n", - " 3.0044e-01, -9.4605e-02, -4.8752e-01, 2.5361e+00, -9.0793e-01],\n", - " [ 1.8772e+00, 8.5481e-01, -8.4488e-01, 1.5698e+00, -1.6336e+00,\n", - " -1.9409e+00, -4.7927e-01, -9.8437e-01, 8.8057e-01, 1.0159e+00],\n", - " [-2.2458e-01, -1.5407e-01, 9.7949e-01, -1.3478e+00, -8.4752e-01,\n", - " 2.2291e+00, 2.0097e-02, -3.6921e-02, -1.5207e+00, 2.2080e+00],\n", - " [ 1.8335e+00, -1.1116e-01, 1.7158e+00, 4.3745e-01, -1.5080e-02,\n", - " 2.2063e-02, 9.2092e-03, -1.8087e-01, -7.6077e-01, 3.4914e-01],\n", - " [-1.5280e-03, -1.7249e+00, 3.9487e-01, 4.8410e-01, -1.2762e+00,\n", - " 4.3278e-01, 3.5852e-01, -7.2127e-01, 9.7572e-01, -4.2663e-01],\n", - " [-9.6790e-01, 3.1904e-01, 1.9527e+00, 1.5507e-01, -2.6549e-02,\n", - " 3.3455e-02, -1.3134e+00, 1.4105e-01, 1.2060e+00, 4.3760e-01],\n", - " [ 1.3415e-01, 7.1450e-01, -5.9799e-02, -4.5007e-01, -7.7680e-02,\n", - " 4.0893e-01, -1.9673e+00, 8.9624e-01, 6.0989e-01, 3.0245e+00],\n", - " [ 9.0126e-01, 1.1798e+00, -1.6314e-01, 9.8894e-01, -5.0119e-01,\n", - " -1.9976e-01, -7.0183e-01, -8.8300e-01, -1.1321e+00, -8.8728e-01],\n", - " [-3.1896e-01, 5.0318e-02, 1.0354e+00, -3.3261e-01, -8.8974e-01,\n", - " -7.7209e-01, -1.6692e-01, -6.9670e-01, -1.7232e-01, -6.2842e-01],\n", - " [-6.6295e-01, 2.0141e+00, 3.3106e-01, 2.9839e-01, -1.1237e+00,\n", - " -7.8125e-01, -3.0903e-01, 3.5664e-01, -1.9195e-01, -3.4968e-02],\n", - " [-7.5442e-01, 6.8441e-01, -1.6399e+00, -1.5894e+00, 3.3328e-01,\n", - " -5.4040e-01, -2.0520e-01, 1.1902e+00, -4.0546e-01, 5.4631e-01],\n", - " [ 3.5297e-01, 1.8425e-01, -2.6629e-01, 2.6103e-01, -1.6353e-01,\n", - " -1.5099e+00, -2.3602e+00, 1.8305e+00, -6.0727e-01, 7.7936e-01],\n", - " [ 3.3149e-01, -1.0999e+00, -4.7988e-01, -1.2186e+00, 1.6860e+00,\n", - " 3.1453e-01, -1.3638e-01, -3.7778e-01, 1.0254e-01, -9.3037e-02],\n", - " [-8.2793e-01, 1.0470e+00, -1.3539e+00, -6.7968e-01, -1.0165e+00,\n", - " -5.5619e-02, 1.8310e+00, 3.9036e-01, 9.2613e-01, -1.7741e-01]])\n", + "tensor([[-1.0902, 0.1886, 0.0956, 0.7495, 1.9529, -0.7950, 0.4216, 1.3919,\n", + " -0.3284, 0.0346],\n", + " [-0.3226, -0.0072, 0.0932, 0.7789, -1.2242, -0.1766, 1.2256, 0.5490,\n", + " -0.7885, 0.6923],\n", + " [-0.2577, -0.9596, -0.7690, -0.5767, 1.1650, 0.6643, 0.7290, -1.8633,\n", + " 0.9807, -0.3629],\n", + " [ 0.0376, -0.3018, 0.3817, -0.8579, -2.3125, 0.5329, 1.2873, -0.5905,\n", + " 0.4314, -0.4986],\n", + " [-0.9039, -0.0558, 0.5211, -0.6979, 0.1829, 0.0322, -0.3460, -0.0964,\n", + " 0.4202, -1.2026],\n", + " [-1.4587, 2.8036, -0.8897, -0.0859, -0.6595, -0.0327, -0.3958, 0.1590,\n", + " 0.0476, 0.6977],\n", + " [ 1.2699, -0.8194, -0.5117, -0.0241, -0.7664, 1.0635, 2.1939, 0.9186,\n", + " 1.2533, 1.2247],\n", + " [ 0.1576, -0.9675, -0.6578, -0.6715, 0.0365, 0.6020, -0.5412, 1.6209,\n", + " -1.2890, 0.5063],\n", + " [ 0.7611, -1.5081, -0.4759, 0.5031, -0.0371, -0.0562, 0.4586, 1.7052,\n", + " 0.8185, 0.3037],\n", + " [ 0.1259, 0.6677, 1.1315, -0.2461, -1.5836, -0.0198, -2.3148, -0.5098,\n", + " -0.7320, 0.1888],\n", + " [-0.9068, 0.0839, 1.1985, 0.8427, 0.1666, -0.0524, 1.6768, 0.6208,\n", + " -0.7887, -0.4840],\n", + " [-0.5844, 0.5233, -0.7987, 0.9863, 0.8913, -0.8844, 0.6393, 0.1853,\n", + " -0.9386, -0.8977],\n", + " [ 0.7607, 0.6126, 1.0632, -1.4381, 0.2137, -0.1998, 0.5679, -2.3812,\n", + " 0.7909, 0.2826],\n", + " [-0.0982, -1.7178, 0.1952, 1.6488, -0.3212, -0.6776, -0.1554, 0.5879,\n", + " 1.0666, 0.4902]])\n", "AlexNet(\n", " (features): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n", @@ -157,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "6e18f2fd", "metadata": {}, "outputs": [ @@ -191,7 +218,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "462666a2", "metadata": {}, "outputs": [ @@ -199,21 +226,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to data\\cifar-10-python.tar.gz\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100.0%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Extracting data\\cifar-10-python.tar.gz to data\n", + "Files already downloaded and verified\n", "Files already downloaded and verified\n" ] } @@ -286,7 +299,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 16, "id": "317bf070", "metadata": {}, "outputs": [ @@ -350,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 17, "id": "4b53f229", "metadata": {}, "outputs": [ @@ -358,43 +371,37 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch: 0 \tTraining Loss: 44.456879 \tValidation Loss: 40.405201\n", - "Validation loss decreased (inf --> 40.405201). Saving model ...\n", - "Epoch: 1 \tTraining Loss: 37.539734 \tValidation Loss: 34.893430\n", - "Validation loss decreased (40.405201 --> 34.893430). Saving model ...\n", - "Epoch: 2 \tTraining Loss: 32.288289 \tValidation Loss: 30.938065\n", - "Validation loss decreased (34.893430 --> 30.938065). Saving model ...\n", - "Epoch: 3 \tTraining Loss: 29.366940 \tValidation Loss: 27.821222\n", - "Validation loss decreased (30.938065 --> 27.821222). Saving model ...\n", - "Epoch: 4 \tTraining Loss: 27.163584 \tValidation Loss: 26.858292\n", - "Validation loss decreased (27.821222 --> 26.858292). Saving model ...\n", - "Epoch: 5 \tTraining Loss: 25.464075 \tValidation Loss: 24.828610\n", - "Validation loss decreased (26.858292 --> 24.828610). Saving model ...\n", - "Epoch: 6 \tTraining Loss: 24.102266 \tValidation Loss: 24.066201\n", - "Validation loss decreased (24.828610 --> 24.066201). Saving model ...\n", - "Epoch: 7 \tTraining Loss: 22.977551 \tValidation Loss: 23.100200\n", - "Validation loss decreased (24.066201 --> 23.100200). Saving model ...\n", - "Epoch: 8 \tTraining Loss: 22.004219 \tValidation Loss: 25.045447\n", - "Epoch: 9 \tTraining Loss: 21.150548 \tValidation Loss: 22.796602\n", - "Validation loss decreased (23.100200 --> 22.796602). Saving model ...\n", - "Epoch: 10 \tTraining Loss: 20.331048 \tValidation Loss: 22.531555\n", - "Validation loss decreased (22.796602 --> 22.531555). Saving model ...\n", - "Epoch: 11 \tTraining Loss: 19.613238 \tValidation Loss: 22.437164\n", - "Validation loss decreased (22.531555 --> 22.437164). Saving model ...\n", - "Epoch: 12 \tTraining Loss: 18.859432 \tValidation Loss: 21.191249\n", - "Validation loss decreased (22.437164 --> 21.191249). Saving model ...\n", - "Epoch: 13 \tTraining Loss: 18.185451 \tValidation Loss: 20.865803\n", - "Validation loss decreased (21.191249 --> 20.865803). Saving model ...\n", - "Epoch: 14 \tTraining Loss: 17.615607 \tValidation Loss: 20.782799\n", - "Validation loss decreased (20.865803 --> 20.782799). Saving model ...\n", - "Epoch: 15 \tTraining Loss: 16.942239 \tValidation Loss: 21.159325\n", - "Epoch: 16 \tTraining Loss: 16.310783 \tValidation Loss: 21.481381\n", - "Epoch: 17 \tTraining Loss: 15.756336 \tValidation Loss: 20.873583\n", - "Epoch: 18 \tTraining Loss: 15.156594 \tValidation Loss: 21.744170\n", - "Epoch: 19 \tTraining Loss: 14.669365 \tValidation Loss: 21.543261\n", - "Epoch: 20 \tTraining Loss: 14.132257 \tValidation Loss: 21.448154\n", - "Epoch: 21 \tTraining Loss: 13.608869 \tValidation Loss: 22.079492\n", - "Epoch: 22 \tTraining Loss: 13.124700 \tValidation Loss: 22.396737\n" + "Epoch: 0 \tTraining Loss: 43.466371 \tValidation Loss: 39.002364\n", + "Validation loss decreased (inf --> 39.002364). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 34.904849 \tValidation Loss: 32.158776\n", + "Validation loss decreased (39.002364 --> 32.158776). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 30.921587 \tValidation Loss: 29.659928\n", + "Validation loss decreased (32.158776 --> 29.659928). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 28.552421 \tValidation Loss: 27.875916\n", + "Validation loss decreased (29.659928 --> 27.875916). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 26.761862 \tValidation Loss: 26.899799\n", + "Validation loss decreased (27.875916 --> 26.899799). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 25.197664 \tValidation Loss: 25.343835\n", + "Validation loss decreased (26.899799 --> 25.343835). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 23.875928 \tValidation Loss: 24.826429\n", + "Validation loss decreased (25.343835 --> 24.826429). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 22.801298 \tValidation Loss: 23.747245\n", + "Validation loss decreased (24.826429 --> 23.747245). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 21.744182 \tValidation Loss: 22.980112\n", + "Validation loss decreased (23.747245 --> 22.980112). Saving model ...\n", + "Epoch: 9 \tTraining Loss: 20.894626 \tValidation Loss: 23.617148\n", + "Epoch: 10 \tTraining Loss: 20.122914 \tValidation Loss: 22.567898\n", + "Validation loss decreased (22.980112 --> 22.567898). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 19.388523 \tValidation Loss: 22.252618\n", + "Validation loss decreased (22.567898 --> 22.252618). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 18.663162 \tValidation Loss: 22.011314\n", + "Validation loss decreased (22.252618 --> 22.011314). Saving model ...\n", + "Epoch: 13 \tTraining Loss: 18.052861 \tValidation Loss: 21.791003\n", + "Validation loss decreased (22.011314 --> 21.791003). Saving model ...\n", + "Epoch: 14 \tTraining Loss: 17.469482 \tValidation Loss: 21.675218\n", + "Validation loss decreased (21.791003 --> 21.675218). Saving model ...\n", + "Epoch: 15 \tTraining Loss: 16.849947 \tValidation Loss: 22.081622\n", + "Epoch: 16 \tTraining Loss: 16.281122 \tValidation Loss: 21.900523\n" ] }, { @@ -404,9 +411,16 @@ "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[1;32md:\\ECL\\3A\\MOD\\IA\\TD1\\gitlab_repo\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 15\u001b[0m line \u001b[0;36m2\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=25'>26</a>\u001b[0m loss \u001b[39m=\u001b[39m criterion(output, target)\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=26'>27</a>\u001b[0m \u001b[39m# Backward pass: compute gradient of the loss with respect to model parameters\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=27'>28</a>\u001b[0m loss\u001b[39m.\u001b[39;49mbackward()\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=28'>29</a>\u001b[0m \u001b[39m# Perform a single optimization step (parameter update)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=29'>30</a>\u001b[0m optimizer\u001b[39m.\u001b[39mstep()\n", - "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\_tensor.py:488\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m 478\u001b[0m \u001b[39mif\u001b[39;00m has_torch_function_unary(\u001b[39mself\u001b[39m):\n\u001b[0;32m 479\u001b[0m \u001b[39mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m 480\u001b[0m Tensor\u001b[39m.\u001b[39mbackward,\n\u001b[0;32m 481\u001b[0m (\u001b[39mself\u001b[39m,),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 486\u001b[0m inputs\u001b[39m=\u001b[39minputs,\n\u001b[0;32m 487\u001b[0m )\n\u001b[1;32m--> 488\u001b[0m torch\u001b[39m.\u001b[39;49mautograd\u001b[39m.\u001b[39;49mbackward(\n\u001b[0;32m 489\u001b[0m \u001b[39mself\u001b[39;49m, gradient, retain_graph, create_graph, inputs\u001b[39m=\u001b[39;49minputs\n\u001b[0;32m 490\u001b[0m )\n", - "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\autograd\\__init__.py:197\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 192\u001b[0m retain_graph \u001b[39m=\u001b[39m create_graph\n\u001b[0;32m 194\u001b[0m \u001b[39m# The reason we repeat same the comment below is that\u001b[39;00m\n\u001b[0;32m 195\u001b[0m \u001b[39m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m 196\u001b[0m \u001b[39m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 197\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 198\u001b[0m tensors, grad_tensors_, retain_graph, create_graph, inputs,\n\u001b[0;32m 199\u001b[0m allow_unreachable\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, accumulate_grad\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n", + "\u001b[1;32md:\\ECL\\3A\\MOD\\IA\\TD1\\gitlab_repo\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 15\u001b[0m line \u001b[0;36m1\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m \u001b[39m# Train the model\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m model\u001b[39m.\u001b[39mtrain()\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=16'>17</a>\u001b[0m \u001b[39mfor\u001b[39;00m data, target \u001b[39min\u001b[39;00m train_loader:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=17'>18</a>\u001b[0m \u001b[39m# Move tensors to GPU if CUDA is available\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=18'>19</a>\u001b[0m \u001b[39mif\u001b[39;00m train_on_gpu:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=19'>20</a>\u001b[0m data, target \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39mcuda(), target\u001b[39m.\u001b[39mcuda()\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\utils\\data\\dataloader.py:628\u001b[0m, in \u001b[0;36m_BaseDataLoaderIter.__next__\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 625\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_sampler_iter \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 626\u001b[0m \u001b[39m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[39;00m\n\u001b[0;32m 627\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_reset() \u001b[39m# type: ignore[call-arg]\u001b[39;00m\n\u001b[1;32m--> 628\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_next_data()\n\u001b[0;32m 629\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_num_yielded \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n\u001b[0;32m 630\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_dataset_kind \u001b[39m==\u001b[39m _DatasetKind\u001b[39m.\u001b[39mIterable \u001b[39mand\u001b[39;00m \\\n\u001b[0;32m 631\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_IterableDataset_len_called \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m \\\n\u001b[0;32m 632\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_num_yielded \u001b[39m>\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_IterableDataset_len_called:\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\utils\\data\\dataloader.py:671\u001b[0m, in \u001b[0;36m_SingleProcessDataLoaderIter._next_data\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 669\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_next_data\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[0;32m 670\u001b[0m index \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_next_index() \u001b[39m# may raise StopIteration\u001b[39;00m\n\u001b[1;32m--> 671\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_dataset_fetcher\u001b[39m.\u001b[39;49mfetch(index) \u001b[39m# may raise StopIteration\u001b[39;00m\n\u001b[0;32m 672\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_pin_memory:\n\u001b[0;32m 673\u001b[0m data \u001b[39m=\u001b[39m _utils\u001b[39m.\u001b[39mpin_memory\u001b[39m.\u001b[39mpin_memory(data, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_pin_memory_device)\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py:58\u001b[0m, in \u001b[0;36m_MapDatasetFetcher.fetch\u001b[1;34m(self, possibly_batched_index)\u001b[0m\n\u001b[0;32m 56\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset\u001b[39m.\u001b[39m__getitems__(possibly_batched_index)\n\u001b[0;32m 57\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m---> 58\u001b[0m data \u001b[39m=\u001b[39m [\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset[idx] \u001b[39mfor\u001b[39;00m idx \u001b[39min\u001b[39;00m possibly_batched_index]\n\u001b[0;32m 59\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 60\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset[possibly_batched_index]\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py:58\u001b[0m, in \u001b[0;36m<listcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 56\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset\u001b[39m.\u001b[39m__getitems__(possibly_batched_index)\n\u001b[0;32m 57\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m---> 58\u001b[0m data \u001b[39m=\u001b[39m [\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mdataset[idx] \u001b[39mfor\u001b[39;00m idx \u001b[39min\u001b[39;00m possibly_batched_index]\n\u001b[0;32m 59\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 60\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset[possibly_batched_index]\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torchvision\\datasets\\cifar.py:118\u001b[0m, in \u001b[0;36mCIFAR10.__getitem__\u001b[1;34m(self, index)\u001b[0m\n\u001b[0;32m 115\u001b[0m img \u001b[39m=\u001b[39m Image\u001b[39m.\u001b[39mfromarray(img)\n\u001b[0;32m 117\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtransform \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m--> 118\u001b[0m img \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mtransform(img)\n\u001b[0;32m 120\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtarget_transform \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 121\u001b[0m target \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtarget_transform(target)\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torchvision\\transforms\\transforms.py:95\u001b[0m, in \u001b[0;36mCompose.__call__\u001b[1;34m(self, img)\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__call__\u001b[39m(\u001b[39mself\u001b[39m, img):\n\u001b[0;32m 94\u001b[0m \u001b[39mfor\u001b[39;00m t \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtransforms:\n\u001b[1;32m---> 95\u001b[0m img \u001b[39m=\u001b[39m t(img)\n\u001b[0;32m 96\u001b[0m \u001b[39mreturn\u001b[39;00m img\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\nn\\modules\\module.py:1194\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *input, **kwargs)\u001b[0m\n\u001b[0;32m 1190\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 1191\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1192\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_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1193\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1194\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39m\u001b[39minput\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1195\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[0;32m 1196\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torchvision\\transforms\\transforms.py:270\u001b[0m, in \u001b[0;36mNormalize.forward\u001b[1;34m(self, tensor)\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, tensor: Tensor) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Tensor:\n\u001b[0;32m 263\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m 264\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m 265\u001b[0m \u001b[39m tensor (Tensor): Tensor image to be normalized.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 268\u001b[0m \u001b[39m Tensor: Normalized Tensor image.\u001b[39;00m\n\u001b[0;32m 269\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 270\u001b[0m \u001b[39mreturn\u001b[39;00m F\u001b[39m.\u001b[39;49mnormalize(tensor, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mmean, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mstd, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49minplace)\n", + "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torchvision\\transforms\\functional.py:360\u001b[0m, in \u001b[0;36mnormalize\u001b[1;34m(tensor, mean, std, inplace)\u001b[0m\n\u001b[0;32m 357\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(tensor, torch\u001b[39m.\u001b[39mTensor):\n\u001b[0;32m 358\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mimg should be Tensor Image. Got \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mtype\u001b[39m(tensor)\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n\u001b[1;32m--> 360\u001b[0m \u001b[39mreturn\u001b[39;00m F_t\u001b[39m.\u001b[39;49mnormalize(tensor, mean\u001b[39m=\u001b[39;49mmean, std\u001b[39m=\u001b[39;49mstd, inplace\u001b[39m=\u001b[39;49minplace)\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } @@ -502,13 +516,13 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 22, "id": "d39df818", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -520,10 +534,11 @@ "source": [ "import matplotlib.pyplot as plt\n", "\n", - "# we stopped the training at epoch 22, so train_loss_list has a length of 23\n", - "last_epoch = 22\n", + "# we stopped the training at epoch 16\n", + "overfit = 15\n", + "last_epoch = 16\n", "\n", - "plt.plot(range(last_epoch+1), train_loss_list)\n", + "plt.plot(range(overfit), train_loss_list[:overfit])\n", "plt.xlabel(\"Epoch\")\n", "plt.xticks(range(last_epoch+1))\n", "plt.ylabel(\"Train Loss\")\n", @@ -541,7 +556,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 10, "id": "e93efdfc", "metadata": {}, "outputs": [ @@ -549,20 +564,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "Test Loss: 21.040502\n", + "Test Loss: 21.245559\n", "\n", - "Test Accuracy of airplane: 69% (696/1000)\n", + "Test Accuracy of airplane: 68% (681/1000)\n", "Test Accuracy of automobile: 79% (798/1000)\n", - "Test Accuracy of bird: 48% (482/1000)\n", - "Test Accuracy of cat: 39% (390/1000)\n", - "Test Accuracy of deer: 54% (545/1000)\n", - "Test Accuracy of dog: 63% (636/1000)\n", - "Test Accuracy of frog: 75% (758/1000)\n", - "Test Accuracy of horse: 63% (630/1000)\n", - "Test Accuracy of ship: 73% (736/1000)\n", - "Test Accuracy of truck: 72% (724/1000)\n", + "Test Accuracy of bird: 40% (407/1000)\n", + "Test Accuracy of cat: 47% (473/1000)\n", + "Test Accuracy of deer: 64% (644/1000)\n", + "Test Accuracy of dog: 52% (529/1000)\n", + "Test Accuracy of frog: 74% (740/1000)\n", + "Test Accuracy of horse: 73% (736/1000)\n", + "Test Accuracy of ship: 73% (731/1000)\n", + "Test Accuracy of truck: 70% (702/1000)\n", "\n", - "Test Accuracy (Overall): 63% (6395/10000)\n" + "Test Accuracy (Overall): 64% (6441/10000)\n" ] } ], @@ -667,9 +682,10 @@ "- After second convolutional layer : $size_{output} = \\frac{(16 + 2*1 - 3) + 1}{2} = 8$ so the size is $32*8*8$\n", "- After third convolutional layer : $size_{output} = \\frac{(8 + 2*1 - 3) + 1}{2} = 4$ so the size is $64*4*4$\n", "***\n", - "We apply a dropout function, which parameter represents the probability to not correct a parameter during the error backpropagation. It seems that a dropout of 0.5 gives the best results :\n", + "We apply a dropout function, with a parameter which represents the probability not to update a parameter during the error backpropagation. It seems that a dropout of 0.5 gives the best results :\n", "- [source1](https://medium.com/@upendravijay2/how-does-dropout-help-to-avoid-overfitting-in-neural-networks-91b90fd86b20#:~:text=A%20good%20value%20for%20dropout,new%20network%20that%20uses%20dropout.) recommends a dropout comprised between 0.5 and 0.8\n", "- [source3](https://arxiv.org/pdf/1207.0580.pdf) seems to recommend a dropout of 0.5\n", + "Therefore we implement a dropout with a value of 0.5.\n", "***" ] }, @@ -682,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -745,73 +761,64 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch: 0 \tTraining Loss: 45.826931 \tValidation Loss: 44.174282\n", - "Validation loss decreased (inf --> 44.174282). Saving model ...\n", - "Epoch: 1 \tTraining Loss: 40.520748 \tValidation Loss: 36.159333\n", - "Validation loss decreased (44.174282 --> 36.159333). Saving model ...\n", - "Epoch: 2 \tTraining Loss: 35.712979 \tValidation Loss: 32.427382\n", - "Validation loss decreased (36.159333 --> 32.427382). Saving model ...\n", - "Epoch: 3 \tTraining Loss: 32.764083 \tValidation Loss: 29.844782\n", - "Validation loss decreased (32.427382 --> 29.844782). Saving model ...\n", - "Epoch: 4 \tTraining Loss: 30.879695 \tValidation Loss: 27.948342\n", - "Validation loss decreased (29.844782 --> 27.948342). Saving model ...\n", - "Epoch: 5 \tTraining Loss: 29.150523 \tValidation Loss: 27.071934\n", - "Validation loss decreased (27.948342 --> 27.071934). Saving model ...\n", - "Epoch: 6 \tTraining Loss: 27.658205 \tValidation Loss: 25.440916\n", - "Validation loss decreased (27.071934 --> 25.440916). Saving model ...\n", - "Epoch: 7 \tTraining Loss: 26.286160 \tValidation Loss: 24.876248\n", - "Validation loss decreased (25.440916 --> 24.876248). Saving model ...\n", - "Epoch: 8 \tTraining Loss: 24.907383 \tValidation Loss: 22.678210\n", - "Validation loss decreased (24.876248 --> 22.678210). Saving model ...\n", - "Epoch: 9 \tTraining Loss: 23.764845 \tValidation Loss: 21.806124\n", - "Validation loss decreased (22.678210 --> 21.806124). Saving model ...\n", - "Epoch: 10 \tTraining Loss: 22.622246 \tValidation Loss: 20.644137\n", - "Validation loss decreased (21.806124 --> 20.644137). Saving model ...\n", - "Epoch: 11 \tTraining Loss: 21.655865 \tValidation Loss: 19.787687\n", - "Validation loss decreased (20.644137 --> 19.787687). Saving model ...\n", - "Epoch: 12 \tTraining Loss: 20.642668 \tValidation Loss: 19.097233\n", - "Validation loss decreased (19.787687 --> 19.097233). Saving model ...\n", - "Epoch: 13 \tTraining Loss: 19.765453 \tValidation Loss: 18.346761\n", - "Validation loss decreased (19.097233 --> 18.346761). Saving model ...\n", - "Epoch: 14 \tTraining Loss: 18.887776 \tValidation Loss: 17.968003\n", - "Validation loss decreased (18.346761 --> 17.968003). Saving model ...\n", - "Epoch: 15 \tTraining Loss: 18.183972 \tValidation Loss: 17.411004\n", - "Validation loss decreased (17.968003 --> 17.411004). Saving model ...\n", - "Epoch: 16 \tTraining Loss: 17.510276 \tValidation Loss: 17.365755\n", - "Validation loss decreased (17.411004 --> 17.365755). Saving model ...\n", - "Epoch: 17 \tTraining Loss: 16.788606 \tValidation Loss: 16.609059\n", - "Validation loss decreased (17.365755 --> 16.609059). Saving model ...\n", - "Epoch: 18 \tTraining Loss: 16.158192 \tValidation Loss: 16.423296\n", - "Validation loss decreased (16.609059 --> 16.423296). Saving model ...\n", - "Epoch: 19 \tTraining Loss: 15.521866 \tValidation Loss: 16.143898\n", - "Validation loss decreased (16.423296 --> 16.143898). Saving model ...\n", - "Epoch: 20 \tTraining Loss: 14.844376 \tValidation Loss: 16.076946\n", - "Validation loss decreased (16.143898 --> 16.076946). Saving model ...\n", - "Epoch: 21 \tTraining Loss: 14.292540 \tValidation Loss: 16.009578\n", - "Validation loss decreased (16.076946 --> 16.009578). Saving model ...\n", - "Epoch: 22 \tTraining Loss: 13.765445 \tValidation Loss: 16.065225\n", - "Epoch: 23 \tTraining Loss: 13.127047 \tValidation Loss: 15.611544\n", - "Validation loss decreased (16.009578 --> 15.611544). Saving model ...\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[1;32md:\\ECL\\3A\\MOD\\IA\\TD1\\gitlab_repo\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 27\u001b[0m line \u001b[0;36m2\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=25'>26</a>\u001b[0m loss \u001b[39m=\u001b[39m criterion(output, target)\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=26'>27</a>\u001b[0m \u001b[39m# Backward pass: compute gradient of the loss with respect to model parameters\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=27'>28</a>\u001b[0m loss\u001b[39m.\u001b[39;49mbackward()\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=28'>29</a>\u001b[0m \u001b[39m# Perform a single optimization step (parameter update)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/ECL/3A/MOD/IA/TD1/gitlab_repo/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X61sZmlsZQ%3D%3D?line=29'>30</a>\u001b[0m optimizer\u001b[39m.\u001b[39mstep()\n", - "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\_tensor.py:488\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m 478\u001b[0m \u001b[39mif\u001b[39;00m has_torch_function_unary(\u001b[39mself\u001b[39m):\n\u001b[0;32m 479\u001b[0m \u001b[39mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m 480\u001b[0m Tensor\u001b[39m.\u001b[39mbackward,\n\u001b[0;32m 481\u001b[0m (\u001b[39mself\u001b[39m,),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 486\u001b[0m inputs\u001b[39m=\u001b[39minputs,\n\u001b[0;32m 487\u001b[0m )\n\u001b[1;32m--> 488\u001b[0m torch\u001b[39m.\u001b[39;49mautograd\u001b[39m.\u001b[39;49mbackward(\n\u001b[0;32m 489\u001b[0m \u001b[39mself\u001b[39;49m, gradient, retain_graph, create_graph, inputs\u001b[39m=\u001b[39;49minputs\n\u001b[0;32m 490\u001b[0m )\n", - "File \u001b[1;32mc:\\Users\\basil\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\torch\\autograd\\__init__.py:197\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 192\u001b[0m retain_graph \u001b[39m=\u001b[39m create_graph\n\u001b[0;32m 194\u001b[0m \u001b[39m# The reason we repeat same the comment below is that\u001b[39;00m\n\u001b[0;32m 195\u001b[0m \u001b[39m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m 196\u001b[0m \u001b[39m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 197\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 198\u001b[0m tensors, grad_tensors_, retain_graph, create_graph, inputs,\n\u001b[0;32m 199\u001b[0m allow_unreachable\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, accumulate_grad\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + "Epoch: 0 \tTraining Loss: 45.957994 \tValidation Loss: 45.453136\n", + "Validation loss decreased (inf --> 45.453136). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 41.204990 \tValidation Loss: 36.171040\n", + "Validation loss decreased (45.453136 --> 36.171040). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 35.501102 \tValidation Loss: 32.933496\n", + "Validation loss decreased (36.171040 --> 32.933496). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 32.841249 \tValidation Loss: 30.118260\n", + "Validation loss decreased (32.933496 --> 30.118260). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 30.851882 \tValidation Loss: 28.085835\n", + "Validation loss decreased (30.118260 --> 28.085835). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 29.164981 \tValidation Loss: 26.311516\n", + "Validation loss decreased (28.085835 --> 26.311516). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 27.612603 \tValidation Loss: 24.930808\n", + "Validation loss decreased (26.311516 --> 24.930808). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 26.152063 \tValidation Loss: 23.870665\n", + "Validation loss decreased (24.930808 --> 23.870665). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 24.808076 \tValidation Loss: 22.573699\n", + "Validation loss decreased (23.870665 --> 22.573699). Saving model ...\n", + "Epoch: 9 \tTraining Loss: 23.563777 \tValidation Loss: 20.767552\n", + "Validation loss decreased (22.573699 --> 20.767552). Saving model ...\n", + "Epoch: 10 \tTraining Loss: 22.301092 \tValidation Loss: 20.177089\n", + "Validation loss decreased (20.767552 --> 20.177089). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 21.413816 \tValidation Loss: 19.422885\n", + "Validation loss decreased (20.177089 --> 19.422885). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 20.356993 \tValidation Loss: 18.999663\n", + "Validation loss decreased (19.422885 --> 18.999663). Saving model ...\n", + "Epoch: 13 \tTraining Loss: 19.352594 \tValidation Loss: 17.884081\n", + "Validation loss decreased (18.999663 --> 17.884081). Saving model ...\n", + "Epoch: 14 \tTraining Loss: 18.529844 \tValidation Loss: 17.269852\n", + "Validation loss decreased (17.884081 --> 17.269852). Saving model ...\n", + "Epoch: 15 \tTraining Loss: 17.687516 \tValidation Loss: 16.816537\n", + "Validation loss decreased (17.269852 --> 16.816537). Saving model ...\n", + "Epoch: 16 \tTraining Loss: 16.958101 \tValidation Loss: 16.552591\n", + "Validation loss decreased (16.816537 --> 16.552591). Saving model ...\n", + "Epoch: 17 \tTraining Loss: 16.270467 \tValidation Loss: 16.126114\n", + "Validation loss decreased (16.552591 --> 16.126114). Saving model ...\n", + "Epoch: 18 \tTraining Loss: 15.676789 \tValidation Loss: 16.180268\n", + "Epoch: 19 \tTraining Loss: 15.014789 \tValidation Loss: 16.113433\n", + "Validation loss decreased (16.126114 --> 16.113433). Saving model ...\n", + "Epoch: 20 \tTraining Loss: 14.352066 \tValidation Loss: 15.588602\n", + "Validation loss decreased (16.113433 --> 15.588602). Saving model ...\n", + "Epoch: 21 \tTraining Loss: 13.847914 \tValidation Loss: 15.765144\n", + "Epoch: 22 \tTraining Loss: 13.369290 \tValidation Loss: 15.462388\n", + "Validation loss decreased (15.588602 --> 15.462388). Saving model ...\n", + "Epoch: 23 \tTraining Loss: 12.790801 \tValidation Loss: 15.474556\n", + "Epoch: 24 \tTraining Loss: 12.315276 \tValidation Loss: 16.384042\n", + "Epoch: 25 \tTraining Loss: 11.817489 \tValidation Loss: 15.977999\n", + "Epoch: 26 \tTraining Loss: 11.399328 \tValidation Loss: 15.734570\n", + "Epoch: 27 \tTraining Loss: 10.892922 \tValidation Loss: 15.807630\n", + "Epoch: 28 \tTraining Loss: 10.461774 \tValidation Loss: 15.664097\n", + "Epoch: 29 \tTraining Loss: 10.159506 \tValidation Loss: 15.932719\n" ] } ], @@ -822,7 +829,7 @@ "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_list = [] # list to store loss to visualize\n", + "new_train_loss_list = [] # list to store loss to visualize\n", "valid_loss_min = np.Inf # track change in validation loss\n", "\n", "for epoch in range(n_epochs):\n", @@ -865,7 +872,7 @@ " # Calculate average losses\n", " train_loss = train_loss / len(train_loader)\n", " valid_loss = valid_loss / len(valid_loader)\n", - " train_loss_list.append(train_loss)\n", + " new_train_loss_list.append(train_loss)\n", "\n", " # Print training/validation statistics\n", " print(\n", @@ -887,9 +894,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Loss: 15.735082\n", + "\n", + "Test Accuracy of airplane: 77% (776/1000)\n", + "Test Accuracy of automobile: 86% (863/1000)\n", + "Test Accuracy of bird: 55% (551/1000)\n", + "Test Accuracy of cat: 64% (648/1000)\n", + "Test Accuracy of deer: 66% (662/1000)\n", + "Test Accuracy of dog: 56% (566/1000)\n", + "Test Accuracy of frog: 84% (849/1000)\n", + "Test Accuracy of horse: 79% (798/1000)\n", + "Test Accuracy of ship: 82% (829/1000)\n", + "Test Accuracy of truck: 84% (840/1000)\n", + "\n", + "Test Accuracy (Overall): 73% (7382/10000)\n" + ] + } + ], "source": [ "model.load_state_dict(torch.load(\"./new_model_cifar.pt\"))\n", "\n", @@ -953,6 +981,47 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This second model has an overall accuracy of about 73% which is better than the previous one. We notice that overfit starts happening on epoch 23, which is better than the first model. It means that this new model stops learning at about epoch 23, whereas the first one stops learning at about epoch 14. " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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hFQqxT///ANNTU3UqFEDr1+/xogRI2R9rFq1CnXq1MEff/whW7Zx40bY2toiKioK1atX/2bdpYGO7CioV43clHo06ijSs9N5roYQQkhZ0aJFC0RERMgeK1asKHTdevXqyf07MDAQERERcHFxwZgxY3Dq1Kki11GrVi3Z/1tYWAAAatasKbcs7/YMycnJePv2rSwI5WncuDEeP34MAHj8+DFq1aoFTU1N2fM+Pj5y69+9exfnz5+Hrq6u7OHq6goAiImJKfJrUTU6sqMgLysvOBo64nnic/wb/S96uPfguyRCCKmwtNSFeDS7DS/bVZaOjg6cnZ0VXvdzdevWxfPnz3HixAmcOXMGvXr1gp+fH/bv3690Herq6rL/z7tY35fLpFKp0v1+TWpqKjp27IgFCxbke66k73elDAo7Cso7lbXg8gLsfbiXwg4hhJQgjuOUPp1UXunr66N3797o3bs3evTogYCAACQkJMDY2Bjq6uqQSCQlsk1ra2tcvnwZvr6+suWXL19G/fr1AQBubm7Ytm0bMjMzZUd3rl69KtdP3bp1ceDAATg4OEBNrex+XnQaSwl5p7KORR1DWlYaz9UQQggp75YsWYJdu3bhyZMniIqKwr59+2BpaQlDQ0MAuTOyzp49i9jYWHz69Eml2540aRIWLFiAPXv2IDIyEr/88gsiIiIwduxYAEDfvn3BcRx+/PFHPHr0CP/++y8WL14s18eoUaOQkJCAPn364MaNG4iJiUFISAi+//77EglpRVVmws78+fPBcZzcNL3mzZvnu1DT8OHDeauxjmUdOBk5ISMnA8ejj/NWByGEkIpBT08PCxcuRL169eDt7Y0XL17g33//hUCQ++v5zz//xOnTp2Fra4s6deqodNtjxozBhAkTMHHiRNSsWRMnT57EkSNHUK1aNQCArq4ujh49ivv376NOnTr49ddf852uyjs6JJFI4O/vj5o1a2LcuHEwNDSUvYaygGMlPc9OATdu3ECvXr2gr6+PFi1aYNmyZQByw0716tUxe/Zs2bra2trQ19dXuO/k5GQYGBggKSlJqXaFmXp2KuZdmodubt1woNeBYvdHCCGVXWZmJp4/fw5HR0e5wbCk4vvaZ6/K39+8x67U1FT069cPf/31F4yMjPI9r62tLXehJlUEluLIO5X1b/S/SBGn8FoLIYQQQr6N97AzatQotG/f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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "overfit = 15 # epoch from which first model stops learning\n", + "overfit_new = 23 # epoch from which new model stops learning\n", + "last_epoch = 30\n", + "\n", + "plt.plot(range(overfit), train_loss_list[:overfit], label = \"First model\")\n", + "plt.plot(range(overfit_new), new_train_loss_list[:overfit_new], color = \"green\", label = \"New Model\")\n", + "plt.xticks(range(last_epoch))\n", + "plt.xlabel(\"Epoch\")\n", + "plt.ylabel(\"Training Loss\")\n", + "plt.title(\"Comparison of Performance of First Model and New Model\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, { "cell_type": "markdown", "id": "bc381cf4", @@ -970,10 +1039,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "id": "ef623c26", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model: fp32 \t Size (KB): 2330.519\n" + ] + }, + { + "data": { + "text/plain": [ + "2330519" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import os\n", "\n", @@ -999,10 +1086,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "id": "c4c65d4b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model: int8 \t Size (KB): 659.379\n" + ] + }, + { + "data": { + "text/plain": [ + "659379" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import torch.quantization\n", "\n", @@ -1011,6 +1116,15 @@ "print_size_of_model(quantized_model, \"int8\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***\n", + "The model has an initial size of about 2.3 MB, and after quantization, it is down to 659 KB, which means it is about 28% of the initial size.\n", + "***" + ] + }, { "cell_type": "markdown", "id": "7b108e17", @@ -1019,6 +1133,154 @@ "For each class, compare the classification test accuracy of the initial model and the quantized model. Also give the overall test accuracy for both models." ] }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Loss: 15.735082\t||\tquantized : 15.726470\n", + "\n", + "Test Accuracy of airplane: 77% (776/1000)\t||\tquantized :77% (777/1000)\n", + "Test Accuracy of automobile: 86% (863/1000)\t||\tquantized :86% (863/1000)\n", + "Test Accuracy of bird: 55% (551/1000)\t||\tquantized :55% (550/1000)\n", + "Test Accuracy of cat: 64% (648/1000)\t||\tquantized :65% (650/1000)\n", + "Test Accuracy of deer: 66% (662/1000)\t||\tquantized :66% (664/1000)\n", + "Test Accuracy of dog: 56% (566/1000)\t||\tquantized :57% (573/1000)\n", + "Test Accuracy of frog: 84% (849/1000)\t||\tquantized :84% (848/1000)\n", + "Test Accuracy of horse: 79% (798/1000)\t||\tquantized :79% (797/1000)\n", + "Test Accuracy of ship: 82% (829/1000)\t||\tquantized :82% (828/1000)\n", + "Test Accuracy of truck: 84% (840/1000)\t||\tquantized :83% (839/1000)\n", + "\n", + "Test Accuracy (Overall): 73% (7382/10000)\t||\tquantized : 73% (7389/10000)\n" + ] + } + ], + "source": [ + "model.load_state_dict(torch.load(\"./new_model_cifar.pt\"))\n", + "quantized_model = torch.quantization.quantize_dynamic(model, dtype=torch.qint8)\n", + "\n", + "# track test loss\n", + "test_loss = 0.0\n", + "class_correct = list(0.0 for i in range(10))\n", + "class_total = list(0.0 for i in range(10))\n", + "\n", + "model.eval()\n", + "# iterate over test data\n", + "for data, target in test_loader:\n", + " # move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # update test loss\n", + " test_loss += loss.item() * data.size(0)\n", + " # convert output probabilities to predicted class\n", + " _, pred = torch.max(output, 1)\n", + " # compare predictions to true label\n", + " correct_tensor = pred.eq(target.data.view_as(pred))\n", + " correct = (\n", + " np.squeeze(correct_tensor.numpy())\n", + " if not train_on_gpu\n", + " else np.squeeze(correct_tensor.cpu().numpy())\n", + " )\n", + " # calculate test accuracy for each object class\n", + " for i in range(batch_size):\n", + " label = target.data[i]\n", + " class_correct[label] += correct[i].item()\n", + " class_total[label] += 1\n", + "\n", + "# average test loss\n", + "test_loss = test_loss / len(test_loader)\n", + "\n", + "# Test accuracy of quantized model\n", + "# track test loss\n", + "q_test_loss = 0.0\n", + "q_class_correct = list(0.0 for i in range(10))\n", + "q_class_total = list(0.0 for i in range(10))\n", + "\n", + "quantized_model.eval()\n", + "# iterate over test data\n", + "for data, target in test_loader:\n", + " # move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # forward pass: compute predicted outputs by passing inputs to the model\n", + " output = quantized_model(data)\n", + " # calculate the batch loss\n", + " q_loss = criterion(output, target)\n", + " # update test loss\n", + " q_test_loss += q_loss.item() * data.size(0)\n", + " # convert output probabilities to predicted class\n", + " _, pred = torch.max(output, 1)\n", + " # compare predictions to true label\n", + " correct_tensor = pred.eq(target.data.view_as(pred))\n", + " correct = (\n", + " np.squeeze(correct_tensor.numpy())\n", + " if not train_on_gpu\n", + " else np.squeeze(correct_tensor.cpu().numpy())\n", + " )\n", + " # calculate test accuracy for each object class\n", + " for i in range(batch_size):\n", + " label = target.data[i]\n", + " q_class_correct[label] += correct[i].item()\n", + " q_class_total[label] += 1\n", + "\n", + "# average test loss\n", + "q_test_loss = q_test_loss / len(test_loader)\n", + "\n", + "\n", + "\n", + "print(\"Test Loss: {:.6f}\\t||\\tquantized : {:.6f}\\n\".format(test_loss, q_test_loss))\n", + "\n", + "for i in range(10):\n", + " if class_total[i] > 0:\n", + " print(\n", + " \"Test Accuracy of %5s: %2d%% (%2d/%2d)\\t||\\tquantized :%2d%% (%2d/%2d)\"\n", + " % (\n", + " classes[i],\n", + " 100 * class_correct[i] / class_total[i],\n", + " np.sum(class_correct[i]),\n", + " np.sum(class_total[i]),\n", + " 100 * q_class_correct[i] / q_class_total[i],\n", + " np.sum(q_class_correct[i]),\n", + " np.sum(q_class_total[i])\n", + " )\n", + " )\n", + " else:\n", + " print(\"Test Accuracy of %5s: N/A (no training examples)\" % (classes[i]))\n", + "\n", + "print(\n", + " \"\\nTest Accuracy (Overall): %2d%% (%2d/%2d)\\t||\\tquantized : %2d%% (%2d/%2d)\"\n", + " % (\n", + " 100.0 * np.sum(class_correct) / np.sum(class_total),\n", + " np.sum(class_correct),\n", + " np.sum(class_total),\n", + " 100.0 * np.sum(q_class_correct) / np.sum(q_class_total),\n", + " np.sum(q_class_correct),\n", + " np.sum(q_class_total)\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***\n", + "Conclusion : \n", + "\n", + "For each class, the test accuracy is very close between the initial model and its quantized version. For each class, the number of correct images classified by the model and its quantized version is very similar, the biggest difference we observe is on the \"dog\" class, where the model classifies correctly 566 images, and the quantized model classifies 573 images. That means that for each class, the quantized model has a test accuracy which is in the worst case 1% different from the initial model.\n", + "\n", + "Overall, the test accuracy is the same, and the quantized model even managed to classify correctly more images than the initial model.\n", + "***" + ] + }, { "cell_type": "markdown", "id": "a0a34b90", diff --git a/hymenoptera_data/train/ants/formica.jpeg b/hymenoptera_data/train/ants/formica.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..af83327233be73099c700fce654749842aad4a9d GIT binary patch literal 7858 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 BsEGgo literal 0 HcmV?d00001 diff --git a/hymenoptera_data/train/ants/imageNotFound.gif b/hymenoptera_data/train/ants/imageNotFound.gif new file mode 100644 index 0000000000000000000000000000000000000000..bdeaae94004e06c6a35d147ec58fb35062076b52 GIT binary patch literal 5504 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 literal 0 HcmV?d00001 diff --git a/results/model2_accuracy.PNG b/results/model2_accuracy.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5a3ede4fdfd4d9962bd978d749678aebd6ccbcbc GIT binary patch literal 22303 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 BziI#g literal 0 HcmV?d00001 -- GitLab