diff --git a/week11/week11.ipynb b/week11/week11.ipynb new file mode 100644 index 0000000..5b175ec --- /dev/null +++ b/week11/week11.ipynb @@ -0,0 +1,2798 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Continual learning: Overcoming catastophic forgetting with memory replay\n", + "\n", + "In this exercise class we'll implement an experiment to measure catastrophic forgetting in a neural network trained on MNIST. We will then fix/reduce the catastrophic forgetting by implementing a simple memory replay strategy." + ], + "metadata": { + "id": "lDTvzuBtNg1X" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Mzy1CzlGQvAk" + }, + "source": [ + "The following figure highlights the setup of the dataset and is taken from [van den Ven & Tolias, 2019](https://arxiv.org/pdf/1904.07734.pdf):\n", + "\n", + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGsAAAFKCAIAAAAlg0X+AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAQY2FOdgAAB4AAAAdYAAAB+wAABExSeSo6AACAAElEQVR42uydd0AUV/f378xsY2Fh6U26FEERe+9iwW7UmEQTY2Jij9FETTW2mGhMfEwxMYmx1xh7A7soVkREkCK9L51l2b7vH+f33HcfQLI2pJzPX8MwM7t759xy7j33exiDwUAQBEEQBEEQBEEQE2CxCBAEQRAEQRAEQUwEPSgEQRAEQRAEQRBTQQ8KQRAEQRAEQRDEVNCDQhAEQRAEQRAEMRX0oBAEQRAEQRAEQUwFPSgEQRAEQRAEQRBTQQ8KQRAEQRAEQRDEVNCDQhAEQRAEQRAEMRX0oBAEQRAEQRAEQUwFPSgEQRAEQRAEQRBTQQ8KQRAEQRAEQRDEVNCDQhAEQRAEQRAEMRX0oBAEQRAEQRAEQUwFPSgEQRAEQRAEQRCTMTwJWFxIwxAQEGB4ctauXYtFhzQMW7ZseVL7lMlkAQEBWHRIAxAQECCTyZ7URP/8808sOqRhWLt27VP08tiEIg3Gv1oj70mfyDCMQCBgWVy8Ql4IOp1Oo9E8yxM4jhMIBFiSyAtCpVLp9fpneYJQKMQmFHlB6PV6lUr1LE9gWVYoFGJJIi8ItVqt0+me+naGYfh8PsdxWJLIi0Cv16vValMWjZ7YgxIKhevXr2/Xrh2WMvIiOHv27KpVq57lCR07dly/fj2WJPIi0Ov1M2fOfPjw4bM8ZM2aNZ07d8bCRF4Et2/fXrhw4bM8wc/P79dff0UnH3lBLFq06NatW099O8MwS5cuHTx4MJYk8iK4f//+okWLlErlv175xB4Uy7Lt27fv1asXljLyIsjKynrGJ0il0j59+mBJIi8CnU5nYWHxjA9p27YtmijygjCl468fCwuLPn36oAeFvCCkUukzPsHf3x+bUOQFwbKsia0fNpEIgiAIgiAIgiCmgh4UgiAIgiAIgiCIqaAHhSAIgiAIgiAIYiroQSEIgiAIgiAIgpgKelAIgiAIgiAIgiCmgh4UgiAIgiAIgiCIqaAHhSAIgiAIgiAIYiroQSEIgiAIgiAIgpgKelAIgiAIgiAIgiCmgh4UgiAIgiAIgiCIqfCa5a/S6XQGg+FJ72IYhuO4Bvh6Wq32RX+cRqNRq9UCgYDP56OVN0LABp4UlmVZ9oXPeuj1er1eTwjhOI5hmOdeN9VqtcFgEAgEPF7zbH+aAdQGnpSGeae0hX/uH2cwGFQqlU6nw8azkfN0TWjD9PIGg0Gn05EX32JDRWiYfgFpGBNt4F4ejedZaIYjGJVK9emnnyYkJDzpjV5eXhs3bnzRzWtKSsr8+fMJIT169Pjiiy9eUL398ssvL168+OGHH06aNAmtvLGRk5Pz0UcflZeXP+mNI0eOnD179ov+eocOHfrzzz8JIbNmzRo1atRzeaZOp4uNjT127Njdu3dLSkr0er1EIgkJCRk+fHjXrl2FQiFaRaPin3/+2bJly1Pc+OOPP/r4+LzQ76ZUKpcsWZKcnAy2+ryMp7y8PDw8/NSpU+np6SqVytLSsnPnzuPGjWvfvn3DzKwhpqPRaF599VWlUvmkN/bq1euzzz570V/v/Pnz69evJ4RMnjz5zTfffEGfkpGR8fHHH8vl8gkTJkyfPh2tolEhl8snT578FPNQw4cPnzdv3ov+ekePHt28eTMhZMaMGePGjXv2B1ZXVx88eLCsrKyea+zt7V999dXm9JaboQel0+mioqKioqKe9Mbg4GC9Xv+iO8vy8vJTp04RQl7cqPHIkSM//fSTXC7Py8trfu+3GSCXy8+dOyeTyZ70Ri8vrwb4eqmpqWCiw4cPfy4PLC4uXrZs2c6dO2s4jadOndqwYcOYMWO+/fZbd3d3NIzGA7WBJ+Up5gWeFK1We+3atdu3b8Pxc2lIY2Ji5syZc+PGDVg6AE6fPv3jjz9OnTr1q6++srW1RatoPOh0uoiICLlc/qQ3isXiBvh6OTk5UH06duz4gj5CrVYvWbLkwIEDhJB27dqhSTQ21Gr16dOnjdsTE3Fzc2uAr5eeng4mOnjw4OfywNzc3AULFhQXF9dzTYcOHdCDauwwDCMWiy0sLGqcNxgM1dXVer2eYRhzc/PaN4rF4uces9TwXLx48YMPPniKrgVpMFiWNTc3r66urnFep9MplUqDwcBxnJmZWe0bRSJRk/uxZWVlb7755unTp/V6vVAo7Nq1q5+fH8uyKSkpV69era6u3rdvX25u7v79+x0dHdE2GgkCgaB2E0oIUSqVEJoiEonqjKBriss1cXFxY8eOzcjIYBjGw8Ojd+/eNjY2mZmZ58+fLy8v/+WXX3Jzc7dt21ZngSAvBYZh6nwder1eoVCAHdbZhNZ5simyffv2gwcPoiU0WliWtbCwqO1B6XQ66PqbUy9PCMnIyCgtLW1pb7kZelAikWjfvn0ajabG+dTU1LFjx8pkMpFIFBUVZWdnV7MseLymvjHj1KlT06dPz8/Pb2l23LTw9va+ceNG7fX948ePz5w5U6fTtWvXrs4VgIaZQH2+/Oc//zlz5oxer3d3d//rr7969OgB3YZSqbxx48a0adPS09OvXLmyZs2a77//HgOyGwkzZsyYPHly7fNTp049e/YsIWT58uV1hifVblcbOSqVasGCBZmZmSzLTpw48fvvv3d2dmYYRqvV3rt374033khMTDxy5Mhff/3VAKE1iIkIhcKYmJjau51v3bo1evRoQoifn9/hw4ctLS1rXNBEh6c1ePTo0ZIlS55umw3SMFhZWT18+LD2+fDw8LfeeosQEhQUdPr06dqz9k3UyY+NjYUhzdy5c7t3717nNdbW1s3sLTfPNag6Iy4qKyvp+MzBwcHBwaE5/WqlUrl+/fqVK1eqVKrm906bGRzH1Wl+Uqn0/6olj+fk5NQMfmlBQcGuXbt0Oh2Px9u7d2+PHj3ov0QiUb9+/fbs2RMaGiqXy7du3frxxx+7urqieTQGzM3N61yopyFzlpaWzcNEL1y4cPXqVYPB0LZt282bN9MxN4/H69Sp06+//jp8+HClUvnbb7/NmDGjeYy/mwd1LlnTrp/H4zk6OlpZWTW/H65UKt95553S0lKWZZ9O7gVpABiGqbOFpF4E9PLNIO4JuHfvHvzqd999t3379i3kLeOMb5NHq9WePn26T58+X3zxBWyAbjnmizRy7t279+jRI0LI4MGD65yX6tKlC8Rhl5eX37x5E0sMaWCOHj2qVCoZhnn//fdrL1l06NAhICCAEJKQkFB/iD+CNAAGg+Hbb7+NjIw0MzObMmUKFgjSGFAoFLDg5uzs7OLi0nJ+OKoJ10Sv1+fm5kZHR9+/f7+wsFCtVkskEk9Pzx49erRp0+Zxc5AlJSWxsbE3btzIzc3V6/UODg4hISEdO3Z80jn11NRUiCXl8/lt2rQxRU73zp07Y8aMUavVDMP4+/uvXbs2OTkZ5gOQZolarU5NTb19+3ZiYmJpaanBYLC2tg4ICOjevbuXl1edG1EMBkNeXt7Nmzfv3r1bXFzM4/FatWrVtWvX4OBguvBlCjqdLj4+Xq1WE0IkEomvr2/9U2gZGRlWVlYKhaJr1651XslxXOvWreE4NzcXX27zoLS0ND4+Pjo6OjMzUy6XC4VCZ2fnjh07dujQ4XFhfiqVKikpKSoqKiUlpaqqSiKR+Pn59ejRw8fHRyAQPNFHp6amwrGHh8e/RhWOHj1aKpU+ePBg4MCBtf/L5/MhqEav11dWVuKbbR5oNJr09PTo6GhwjHU6nVQq9fX17datm6+v7+O63YKCgjt37ty5c6egoIDjOFdX106dOrVv3/6JIlf1ev3Dhw9hJ4yZmVlAQMAThS5funRpw4YNOp1u5syZnTt33r59O77NZolarU5LS7tz505CQgLt5f39/bt16+bj41NPL3/79u3o6GiZTCYQCFxdXbt06RIcHPxE4XNarTYxMRGELs3NzWEKqX7kcjlMlfr5+UkkkpbzmtCD+h8yMzPXrVv3zz//5OXl1YixFolEgwcPXrVqVY0VHp1Od/jw4a+//vrevXvGuwYZhnFzc3vnnXcWLVpUZzxMbc6dO/fWW2/l5OTweLzFixcvW7bMlLs0Go1Go7GxsXnjjTc++eQTZ2dn0FFFmiU3b95cs2bNuXPnaoznGIaxsbF59dVXv/zyyxrxLQqFYuPGjZs2bcrKyjK2ao7jgoODFy9ePGHCBFN2AOp0up9++mnp0qVKpdLW1vann37y9fWt/5YJEyZ069attLT0cfpCBoOhqKgIjlHTvBmgUqm2bt36yy+/xMfH19inwXGcv7//4sWLp0yZUmMEkJKSsmTJkjNnzlRVVRmbtIWFxfDhw5ctWxYYGGjKpxcXF7/22msREREMw/Tu3Xvbtm3/OrodNmzYsGHDHvffkpKSnJwcQoiFhQUqnTQP7t+/v3r16oiIiJKSkhr/srKyGjVq1Jo1a1q1amV8XqvVbtq0aePGjampqcaBcxzHBQQEzJ8/f9q0aSb6+du3b583b55cLpdIJOvWrTNleEopKChYvHhxWVlZSEjIV199dfz4cXybzQ+DwXDr1q1vvvnm/PnzFRUVNQaiUql00qRJq1atsre3Nz5fXV0NvXxmZmaNXr5t27YfffTR66+/boqvrtPpNm3atHTpUoVCYWlp+euvv5piotnZ2dCPBwYGtqhQZ/Sg/j+pqamvvvrqnTt3DAaDUCj08fGxsrLSaDQ5OTn5+flKpfLEiRNpaWknT540Vl4+ePDgjBkzKioqWJb18vKCwNa8vLyMjIzMzMzly5fn5OT88ssv/ypRdenSpbfffhvcp08++eTLL780UdbC0tJy1qxZ7777bkhISLOJqUXq5PTp09OnT8/Ly2MYxsrKytPT09zcXKFQpKenl5WVFRcXb9q0qaioaNu2bbQV02q1y5Yt+89//qPRaAQCQevWra2trbVabVpamkwmu3v37rvvvltVVfXOO+/U/9HQsH722WdKpdLa2nrz5s3jx4//1y9sbW1d/+xXSUnJtWvXCCEsy2L0aVNHq9UuXrz4l19+0Wq1LMu6ubk5OztzHFdcXJyWlqbRaOLj42fNmiUUCo1lKrKzs1955ZX79+8TQmxtbb28vEQiUWVlZWJiYmVl5f79++Pj448ePfqvUv5FRUVvvfXW2bNnGYbp27fv9u3bn1EiX6vV/vbbb9nZ2YSQESNG1I7xQ5ocELJBvWIvLy+JRFJdXZ2ZmVlcXFxeXr5z586MjIyzZ88ae0TffffdF198odVq+Xx+69at7e3t9Xp9RkZGbm7ugwcP5s+fX1FRsWjRon/tf3fv3g3uk6Wl5ffffz9t2jTTF6A0Gs3XX399584dS0vLn376qUXN9Lcozp8/P2XKFNADs7S09Pb2FovFCoUCxO7Kysp+//334uLi3bt3UxPV6/UrVqz47rvvtFqtQCDw8fGxtbWFhdbCwsJ79+69++67SqXy3Xffrf+jDQbD5s2bwX2ytrb+9ddfTUwoeu/ePXDbOnbsmJaWduLEiWvXrhUVFVlaWgYEBISFhXXv3r15ykQZngRCiFgsjoyMNDRBkpKSYBLRzMysoKCgxn81Gs3UqVOhBezbt+/NmzeLi4vlcnlFRUV2dvbmzZthIMgwzNq1a+ldpaWl4KBLpdKtW7cWFBTI5fKqqqqCgoLffvsNtrGam5tfvnyZ3gJpTAghY8eOpSejoqJg0ovP569YsUKtVpv+u3Q6HSQmp3z33XfwERs2bGhyr2nXrl0sywYEBDzFvWvXriWEhIaGNkX7NBgMBw4cAE+7c+fOtf9bUFAAeT8Yhpk9e3ZSUlJZWVlVVVVZWVlKSsrChQvB5RYIBFFRUfSu69evQ1/r6+t79erV4uLiqqqqysrKjIyMBQsWgMH7+/vDoqtxMRJCNm7cSG3s119/BflgS0vL48ePP6+f/J///Aca1vbt28N8WyNHq9V27tyZELJly5YnvVcmk0FzER4e3kRNdMSIEWAbmzZtqtOAYSHR0dFxx44deXl5lZWVcrlcJpNdvHiR6oh07txZq9XSuz788EOWZVmWnTFjxqNHjyoqKhQKRWlpaVRUVEhICBj8okWL9Ho9XF9ZWQmvgBAil8vhZHFx8ejRo1mWZRimf//+OTk5z/iW79y58+abb8LP8fDwiI+PbyrvKDw8nBASEBAgk8me9F5Ipd25c+cafUpT4erVq2AY7dq1Kysrq/FflUoFlsNx3Ouvvx4XF1dSUlJVVVVeXp6amrps2TKIFmFZ1riJS05Oht7f09Pz5MmTMpmsqqpKLpdnZWV9+eWXYCG2tra5ubn0lm3btsHX+Oyzz+jJvXv3wpBAIpFs27bNuAqYwuHDh83MzBiGWblyJdSF3bt3w6csXry4ab2m0NBQQojxUMp0IO5x165dTbQJPXr0KLy1jh070jaNUl5e3qZNGzDRGTNmJCYm0l4+OTl58eLF4DWJxeKLFy/Su2JjY2HONCAg4Pz588XFxQqForKyMj09feHChXCLq6urcY344Ycf4GusX7+envz9998haNnGxuaff/6p/fUex4IFC6DiTJgwwdXVtcZUgoWFxZQpU56iOXpZREZGgu7xv16JHtT/kZiYCK2nm5tbRkZG7ds3btwI1hAWFmZc0GAr8+fPr2Fter3+q6++YhiGYZglS5bQ87U9qJiYGGdnZxj7fv3110/kPtUJelBNtG2t34Patm0bOBuDBw/WaDQ1/qtWqydOnAjvfd26dfT8qlWr4OShQ4dq3KLVagcMGACN9cmTJ2sUo7EHtWXLFmhQpFLpqVOnntfvjY6OhqEJy7Jbt25tEu8IPajHeVBarXbQoEGEEB6PV+fbjI+PhxaY47iioiI4WVVVFRQUBB18dXV1jVvu3r0LzXJQUFB5eTmcrO1BlZeXjxs3DmpH37596cOfgpSUlH79+rm7u0N6QIZhevToAcLZTQX0oB7nQZ04cQL2OHXv3p2aE0Wn082ePRs89o8++oie/+233xiGYVn2l19+qXGLWq1+44034BO3b99Oz9f2oA4ePAhtnVgs3rt3r+ljUyA3N9fT05MQ0r9/f/rN0YNqitTvQe3evRuGlEOHDqXTQ8ZtLGSkZRhmzZo19Pw333wDJ/fv31/jFpVKNXz4cGiWjxw5Qs/X9qC2b98Ovby1tfWxY8dMN1GdTgctPzSY4DK1bdvWx8eHbimEhrSwsLBJvCPTPSiM4vs/srKyfH19s7KypkyZUmfsx4gRI+bPn08IKSsrU6lUMPMEXTWsota4nmEYUP339PTs0KHD4z43JiZmxIgReXl5ZmZmK1euhOlYfB1IbfLz8319fQsKChYtWlQ7wpPP5w8ZMgRS1BcWFtLz9Lh28hCO47744ovQ0FBvb+/g4ODHfe727dtnzpypVqsdHR13795d54b7pyA5OXn8+PGlpaUMw0ydOrXO7ENIE6K0tNTCwsLV1dXS0vL111+vfYGvr6+fn19BQYFOp5PJZCA8XVVVBSlQDQZD7VY0MDDw66+/ZlnWz8/vcWlSKioqpk2bdvjwYUJIaGjo33///Szhdnl5edeuXaPpBPl8vpWVVW5ublBQUFPPFojk5ub6+fnl5eXNnDmztpGwLDtkyJDffvtNp9MZN6F0o2Zt++Tz+QsWLPD39/fx8enZs2edH2owGI4cOTJ9+vTy8nJzc/M9e/aMGjXqib62Xq+fM2dORkaGo6PjDz/8gNGkzZi8vDw/P7/CwsI5c+bU3j/PcdywYcMOHDig1+sLCgroeWqutRP4CgSCJUuW9O7d28fHp1OnTo8z0Z07d86cObO6utre3n737t0gkGsiGo0GYrAJIe7u7suXL3/11VdhhFxQUPDjjz9u3LhRLpdfv3597ty5u3btak4NKXYJ/8egQYPu3r2rVqsfl2CBOtM6nY5e4+npyePxtFrttm3bvLy8Jk2a5ODgQINTPT0961eDiI6OnjBhQm5urpmZ2Zo1a+bPn48bmZDHsXjx4sWLF1dVVdU5lDQYDFSJAbTygNatWzMMYzAYPvroI5FI1L17dxsbG+qlDxgwAJah6sRgMOzZs+e9995Tq9Wurq47duyo5+InIi4ubtKkSenp6bBlZd26dSgj0dSxs7MDN6aysrJONbM6TdTKysre3j4tLS0/P3/69OmfffaZl5cXxIsSQgQCAcxbPQ65XD5v3rxDhw4xDDNixIjt27c/4/iSz+fPnz/f3d29rKzs3LlzN2/ePH369NmzZz/44IOvv/76iVQBkcbGu+++CxtCHjdNyXEcx3E6nc44raK3tzfHcVqt9uuvv7a2th40aJCtrS0dBXbu3JmuiNZp88ePHwf3SSqVbtu27UndJ0LIn3/+eeTIER6P99lnn0FcK9JcWbhw4cKFC6urqx/XhNImiM7yEEJAz9ZgMHz22WcCgaB37952dnbUyPv169evX7/HfaJer9+9e/ecOXMUCoW9vf3+/fv79+//RN+5srLS3t6ez+eD9wVRiICTk9Pq1atbt24Nk7DHjx+/dOkSLFg1D9CD+h+odep0uvLy8tLS0qKiopSUlOjoaBoeoNfrqQfl5+c3cODA8PDwysrKRYsWrVmzpmvXroMGDerfvz8IUdTzWUlJSa+//npaWhohxNLScty4ceg+If8KnZdSq9VlZWWlpaX5+fmJiYnXr1+/cuUKtV56fVhY2Pr16zMyMjIyMsaMGePh4dGjR48hQ4Z069bN09OzftmcY8eO3bhxAwYTbdq0eVyi8ScCIm2mT5+enJzMMEyvXr127txZQ1YIadLAvjuDwVBVVVVaWlpaWpqRkQHJHm7cuFHDRAUCwdSpU6Ojo7Va7b59+44cORIcHNynT5+hQ4cGBQU5OzvX3yrOnDkT3DaGYcaOHfvsOe+7devWrVs3OP7000937Njx0UcflZSU/PDDD35+fu+99x6+36YObfQ0Gk1ZWVlZWVlBQUFiYuKtW7euXLkCA1PjJnTo0KGenp4pKSm5ublTpkxxdXXt1q1baGho3759PTw8INrncURGRv7222+QocTb2/tJx6aEkPv373/xxRcGgyEsLGzGjBn4+loCdJKU9vIFBQUPHz68efMmbKqvYaJjxoxZuXJlXl5eamrqhAkTPDw8unfvPnTo0O7du3t4eDxu9R44efLk3bt3QdrX39//cUup9WBnZ3f//v3S0lKtVuvg4FD7gmnTpv39998nT55UKBT//PMPelDNFoVCERkZeerUqXv37hUWFspkspKSktrhT8aG/sMPP7z99tu3b9/W6/VFRUUnT548efKkWCz28/MbNGjQK6+80qVLlzpXLePj4+lxYWHhl19++fvvv5uSAAppyRQVFUVERISHhyclJRUVFclksvLy8noy0/v4+GzYsGH+/PnZ2dl6vT4tLS0tLW337t02NjaBgYFjxowZNWqUn59fnePUs2fP0uPLly9v3779/ffff5Yvr9fr//nnnw8++ABSPw0cOHDbtm1PmjMNaeTcv3//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Xbvm7OyM+6ZkI6iioiLcESfblYQztKWlJYvFwstslJSUXL16FU93pjMon8/H6/SvX79eKpW+evXq0KFDssPWhULhrl278PK+zfFjlXYeFB6JW3se1Lp16zw9Pf/44w+5COrdu3cMBoPH48nFoklJSRoaGvQaMjk5OWfPnpVdCEEikbx+/RqvSX337l2xWHzv3r0TJ07I3lmrqqqmTp2KEOrevbsyPOMfPnx4nfOgFi5c6OXlhZfNlY2gbt++raqqqq2tLRcp4a1azM3NceJkZmaePn0aDx6g8/DLly/pJTprampw4siepLq6eujQoQihoUOHNvkvVdoIqqam5nPzoHr16hUQEPDs2TO5CGrbtm0EQfj6+so949y1axeOUfFYvjdv3hw9epRePh5XAgcOHOByufr6+iKRqKSk5MqVK7LTnfEMKz8/P4SQMgT5paWlLi4ubDZbbh6UUCiMjIz09/fH80lkI6ilS5cihIKCguSmJq5atQohFBERgZvdz58/P3HihGziCASCnTt34uW8SktLi4qK4uLiZD9XKpVmZ2e7uroSBEHP121CShtBvXnzRkdHR0tLS26qA56R269fv5KSErkIqlevXggh2e1JsL59+yKEZs+ejRP8wYMHJ0+elA2Eqqurx44dSxAEXlglPT391KlTsj0qYrH44cOHurq6TCazOeLYhnr48KGKioqtra3cJJm3b996enriZTZkIyiRSIS3dvzll19kE0cikYSHhyOEVq5cidPh9u3b58+fl02c8vLyQYMGIYTwEp2pqanHjx+XfaKHt4fS0tJSUVFpjiaQ0kZQeFGNyMhIudfPnj3r4uKCW4yyEVRhYaGVlRVC6Ny5c7LHSyQSHo/H4XBwLwqfz798+fLNmzdlKwG80hJBEHg81IsXLw4ePChb2wgEgt9++w03h5ThUT5eEK/2PKg///zT3d0dR+yyEVR6erqxsTGLxZILGXJycoyMjJhMJl5iqqCgIC4uDq9cSqcefrrHYDCOHz8uFoufPHly/Phx2e4mgUCwZMkSkiR9fX2b/JcqHkEpy1QWb29vY2Pj169fX79+nX5RKpXireXwJjOyxwuFwuLiYgaDITdI9NGjR8+ePUMfJ6WkpqaGhoaOHDmysLCQPkZDQ8PGxoYgCNyxOGvWrF69ev3555/0AXihT9xRqAyzfQICArS0tB49ehQf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)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "MN_GMVuyPD9D" + }, + "outputs": [], + "source": [ + "\"\"\"\n", + "Code adapted from the torchvision MNIST example:\n", + "https://github.com/pytorch/examples/blob/main/mnist/main.py\n", + "\n", + "BSD 3-Clause License\n", + "\n", + "Copyright (c) 2017, \n", + "All rights reserved.\n", + "\n", + "Redistribution and use in source and binary forms, with or without\n", + "modification, are permitted provided that the following conditions are met:\n", + "\n", + "* Redistributions of source code must retain the above copyright notice, this\n", + " list of conditions and the following disclaimer.\n", + "\n", + "* Redistributions in binary form must reproduce the above copyright notice,\n", + " this list of conditions and the following disclaimer in the documentation\n", + " and/or other materials provided with the distribution.\n", + "\n", + "* Neither the name of the copyright holder nor the names of its\n", + " contributors may be used to endorse or promote products derived from\n", + " this software without specific prior written permission.\n", + "\n", + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n", + "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n", + "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n", + "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n", + "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n", + "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n", + "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n", + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", + "\"\"\"\n", + "\n", + "import argparse\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torch.optim as optim\n", + "from torchvision import datasets, transforms\n", + "from torch.optim.lr_scheduler import StepLR" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "Bu5GtxDyPMW5" + }, + "outputs": [], + "source": [ + "# Network implementation -- bonus exercise: Modify the network architecture,\n", + "# and study the effect on the training results.\n", + "\n", + "class Net(nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(Net, self).__init__()\n", + " self.conv1 = nn.Conv2d(1, 32, 3, 1)\n", + " self.conv2 = nn.Conv2d(32, 64, 3, 1)\n", + " self.dropout1 = nn.Dropout(0.25)\n", + " self.dropout2 = nn.Dropout(0.5)\n", + " self.fc1 = nn.Linear(9216, 128)\n", + " self.fc2 = nn.Linear(128, 10)\n", + "\n", + " def forward(self, x):\n", + " x = self.conv1(x)\n", + " x = F.relu(x)\n", + " x = self.conv2(x)\n", + " x = F.relu(x)\n", + " x = F.max_pool2d(x, 2)\n", + " x = self.dropout1(x)\n", + " x = torch.flatten(x, 1)\n", + " x = self.fc1(x)\n", + " x = F.relu(x)\n", + " x = self.dropout2(x)\n", + " x = self.fc2(x)\n", + " output = F.log_softmax(x, dim=1)\n", + " return output" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "FljvS0QcPPTg" + }, + "outputs": [], + "source": [ + "# Exercise: Adapt the following function and store part of the images\n", + "# presented during training in a replay buffer. Replay these images\n", + "# during the training step.\n", + "\n", + "def train(args, model, device, train_loader, optimizer, epoch, buffer = None):\n", + " model.train()\n", + "\n", + " for batch_idx, (data, target) in enumerate(train_loader):\n", + "\n", + " ### START SOLUTION ###\n", + " # We append images and labels from the first training batch\n", + " # to our buffer. You can extend this strategy based on how\n", + " # many images you choose to store in the buffer.\n", + " if buffer is not None and batch_idx == 0:\n", + " if buffer is not None:\n", + " images, targets = next(iter(train_loader))\n", + " buffer.add(images, targets)\n", + " ### END SOLUTION ###\n", + "\n", + "\n", + " data, target = data.to(device), target.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " output = model(data)\n", + " loss = F.nll_loss(output, target)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " ### START SOLUTION ###\n", + " # A simple strategy for overcoming forgetting is to retrieve images\n", + " # from the buffer (here: one image per class) and perform a gradient\n", + " # step on these images along with every incoming new batch.\n", + " if buffer is not None and len(buffer) > 0:\n", + " replayed_images, replayed_targets = buffer.get()\n", + " replayed_images = replayed_images.to(device)\n", + " replayed_targets = replayed_targets.to(device)\n", + " optimizer.zero_grad()\n", + " output = model(replayed_images)\n", + " loss = F.nll_loss(output, replayed_targets)\n", + " loss.backward()\n", + " optimizer.step()\n", + " ### END SOLUTION ###\n", + "\n", + " if batch_idx % args.log_interval == 0:\n", + " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", + " epoch, batch_idx * len(data), len(train_loader.dataset),\n", + " 100. * batch_idx / len(train_loader), loss.item()))\n", + " if args.dry_run:\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "QXPgWNCRPRd4" + }, + "outputs": [], + "source": [ + "# The test routine was adapted from the original implementation and now computes\n", + "# the classification probabilities per class instead of an average. This allows to\n", + "# later assess the effect of catastrophic forgetting. No adaptations in this function\n", + "# are required for the exercise.\n", + "\n", + "import collections\n", + "\n", + "def test(model, device, test_loader):\n", + " model.eval()\n", + " test_loss = 0\n", + " correct_by_class = collections.Counter()\n", + " count_by_class = collections.Counter()\n", + " with torch.no_grad():\n", + " for data, target in test_loader:\n", + " data, target = data.to(device), target.to(device)\n", + " output = model(data)\n", + " test_loss += F.nll_loss(output, target, reduction='sum').item() # sum up batch loss\n", + " pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability\n", + " correct = pred.eq(target.view_as(pred)).float()\n", + " for class_ in range(10):\n", + " idc = (target == class_)\n", + " correct_by_class[class_] += correct[idc].sum().item()\n", + " count_by_class[class_] += idc.sum().item()\n", + "\n", + " test_loss /= len(test_loader.dataset)\n", + " test_acc = correct / len(test_loader.dataset)\n", + "\n", + " print(f'\\nTest set: Average loss: {test_loss:.4f}')\n", + " result = {}\n", + " for class_ in range(10):\n", + " acc = correct_by_class[class_] / count_by_class[class_]\n", + " result[class_] = acc\n", + " print(\n", + " f\"Class {class_} accuracy: \"\n", + " f\"{correct_by_class[class_]}/{count_by_class[class_]}\"\n", + " f\"({acc*100:.0f}%)\"\n", + " )\n", + "\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "UsdJlkLkRRbp" + }, + "outputs": [], + "source": [ + "# Exercise: Adapt the dataset class \"MNISTContinualLearning\" for the experiment\n", + "# outlined in the introduction text. The class needs to support indexing of the\n", + "# dataset based on the provided list of classes.\n", + "\n", + "def identity(x):\n", + " return\n", + "\n", + "class MNISTContinualLearning(datasets.MNIST):\n", + "\n", + " def __init__(self, *args, classes=list(range(10)), **kwargs):\n", + "\n", + " # This inherits from the base dataset\n", + " super().__init__(*args, **kwargs)\n", + "\n", + " if len(classes) < 2:\n", + " raise ValueError(f\"Need at least two classes, but got {len(classes)}\")\n", + "\n", + " # Add code for filtering the dataset here. You need to adapt\n", + " # the \"data\" and \"targets\" attribute of the dataset. The \"data\"\n", + " # attribute stores the images as a numpy array, while the \"targets\"\n", + " # attributes stores the labels as a numpy array.\n", + " # You can override the existing attributes.\n", + " #\n", + " # self.data = ...\n", + " # self.targets = ...\n", + " \n", + " ### START SOLUTION ###\n", + " idc = None\n", + " for class_ in classes:\n", + " if idc is None:\n", + " idc = self.targets == class_\n", + " idc |= self.targets == class_\n", + "\n", + " self.data = self.data[idc]\n", + " self.targets = self.targets[idc]\n", + " ### END SOLUTION ###\n", + "\n", + "\n", + "def test_dataset():\n", + " transform=transforms.Compose([\n", + " transforms.ToTensor(),\n", + " transforms.Normalize((0.1307,), (0.3081,))\n", + " ])\n", + " dataset1 = MNISTContinualLearning('../data', train=True, download=True, transform=transform, classes = [0, 5])\n", + " assert len(dataset1) == 11344\n", + "\n", + "test_dataset()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "EDwtthksNUpw" + }, + "outputs": [], + "source": [ + "# To implement memory replay, add additional code (functions or classes)\n", + "# to this cell. One possible solution is to implement a \"Buffer\" class\n", + "# that allows to add images into memory, and allows to retrieve the stored\n", + "# images and labels for training the model.\n", + "#\n", + "# The buffer is typically memory constrained, and there are multiple ways\n", + "# to efficiently compress the individual elements present in the buffer.\n", + "# Think about different ways of reducing the storage required by your buffer\n", + "# class, and explore which of them is most effective at mitigating catastophic\n", + "# forgetting.\n", + "\n", + "\n", + "### START SOLUTION ###\n", + "\n", + "class Buffer(nn.Module):\n", + "\n", + " def __init__(self):\n", + " self.buffer = {}\n", + " \n", + " def add(self, images, targets):\n", + " for class_ in targets.unique():\n", + " idc = targets == class_\n", + " self.buffer[class_] = images[idc][0]\n", + "\n", + " def get(self):\n", + " assert len(self) > 0\n", + " keys = list(self.buffer.keys())\n", + " targets = torch.tensor(keys)\n", + " images = torch.stack([self.buffer[k] for k in keys], dim = 0)\n", + " assert len(targets) == len(images)\n", + " return images, targets\n", + "\n", + " def __len__(self):\n", + " return sum(len(v) if v is not None else 0 for v in self.buffer.values())\n", + " \n", + "### END SOLUTION ###" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "u2xvlBoZPTyx" + }, + "outputs": [], + "source": [ + "# Adapt the main training loop to work with the functions you defined above.\n", + "\n", + "def train_model(args, model, phase, replay_buffer = [], history = [], buffer = None):\n", + " use_cuda = not args.no_cuda and torch.cuda.is_available()\n", + " device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n", + "\n", + " torch.manual_seed(args.seed)\n", + "\n", + " train_kwargs = {'batch_size': args.batch_size}\n", + " test_kwargs = {'batch_size': args.test_batch_size}\n", + " if use_cuda:\n", + " cuda_kwargs = {'num_workers': 1,\n", + " 'pin_memory': True,\n", + " 'shuffle': True}\n", + " train_kwargs.update(cuda_kwargs)\n", + " test_kwargs.update(cuda_kwargs)\n", + "\n", + " transform=transforms.Compose([\n", + " transforms.ToTensor(),\n", + " transforms.Normalize((0.1307,), (0.3081,))\n", + " ])\n", + " \n", + " # You need to replace the original MNIST dataset here by the continual\n", + " # learning dataset we implemented in the previous cell. Make sure to\n", + " # pass the list of classes selected for training in args.train_classes.\n", + " \n", + " ### START SOLUTION ###\n", + " # We added the revised MNIST class here, which takes the same arguments\n", + " # as the original class, but additionally takes a \"classes\" argument which\n", + " # specifies the subselection of classes to consider during this training\n", + " # phase.\n", + " dataset1 = MNISTContinualLearning('../data', train=True, download=True,\n", + " transform=transform, classes=args.train_classes)\n", + " ### END SOLUTION ###\n", + " dataset2 = datasets.MNIST('../data', train=False, download=True,\n", + " transform=transform)\n", + " train_loader = torch.utils.data.DataLoader(dataset1,**train_kwargs)\n", + " test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs)\n", + "\n", + " model = model.to(device)\n", + " optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n", + " scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n", + "\n", + " for epoch in range(1, args.epochs + 1):\n", + " ### START SOLUTION ###\n", + " # We additionally pass the \"buffer\" class here to collect training\n", + " # images for later memory replay.\n", + " # \n", + " # Original content:\n", + " # train(args, model, device, train_loader, optimizer, epoch)\n", + " train(args, model, device, train_loader, optimizer, epoch, buffer)\n", + " ### END SOLUTION ###\n", + " test_results = test(model, device, test_loader)\n", + " test_results[\"phase\"] = phase\n", + " history.append(test_results)\n", + " scheduler.step()\n", + "\n", + " return history\n" + ] + }, + { + "cell_type": "code", + "source": [ + "# We now define the experiment setup.\n", + "# Without modifications to the code, the following will simply train an MNIST\n", + "# network multiple times, and reach an accuracy of >99% on the test set.\n", + "#\n", + "# The result will be modified in two steps:\n", + "#\n", + "# -- first, after implementing the MNISTContinualLearning dataset, you will be\n", + "# able to observe catastrophic forgetting: Training on a new task (specified)\n", + "# by the \"phase\" and \"config.train_classes\" variables will make the network\n", + "# forget the previously learned tasks, and you will observe a performance drop.\n", + "#\n", + "# -- second, after implementing the catastrophic forgetting network, you will\n", + "# fix the catastrophic forgetting my implementing a simple memory buffer. This\n", + "# buffer will keep some of the images seen in each individual training phase,\n", + "# and add them to the training in each subsequent phase. This task is open-ended\n", + "# and different strategies exist. They will differ in terms of memory efficiency\n", + "# and performance.\n", + "\n", + "# You should adapt the train config to each experiment setup and especially test the\n", + "# effects of taking different values for the number of epochs (per phase of the training)\n", + "# and the learning rate used.\n", + "config = argparse.Namespace(\n", + " batch_size=64, \n", + " test_batch_size=1000, \n", + " epochs=3, \n", + " lr=0.01,\n", + " gamma=0.7,\n", + " no_cuda=False,\n", + " dry_run=False,\n", + " seed=1,\n", + " log_interval=10,\n", + " save_model=False\n", + ")\n", + "\n", + "def train_regular_mnist():\n", + " model = Net()\n", + " history = []\n", + "\n", + " config.train_classes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n", + " train_model(config, model, phase = \"baseline\", history = history)\n", + " return history\n", + "\n", + "# Uncomment to train\n", + "#history_regular_mnist = train_regular_mnist()\n", + "#history_regular_mnist" + ], + "metadata": { + "id": "SK-GNifLPN2S" + }, + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Exercise 1: Implement an experiment setup that measures catastrophic forgetting while\n", + "# training in a task-incremental way on digits (0,1), (2,3), ..., (8, 9). After finishing\n", + "# training, measure the performance on the first task again.\n", + "#\n", + "# Implementation requires to fill in code further up in this notebook. You can visualize\n", + "# the result using the code further below.\n", + "\n", + "### START SOLUTION ###\n", + "# In this first part, we implement an experiment setup to measure catastrophic forgetting.\n", + "# We will subsequently train on pairs of classes, (0,1), then (2,3), etc., and in the end\n", + "# revisit the first task to measure if there was any forward transfer while training on the\n", + "# other tasks.\n", + "\n", + "def train_catastrophic_forgetting():\n", + " model = Net()\n", + " history = []\n", + "\n", + " config.train_classes = [0, 1]\n", + " train_model(config, model, phase = \"0_1\", history = history)\n", + " \n", + " config.train_classes = [2, 3]\n", + " train_model(config, model, phase = \"2_3\", history = history)\n", + "\n", + " config.train_classes = [4, 5]\n", + " train_model(config, model, phase = \"4_5\", history = history)\n", + "\n", + " config.train_classes = [6, 7]\n", + " train_model(config, model, phase = \"6_7\", history = history)\n", + "\n", + " config.train_classes = [8, 9]\n", + " train_model(config, model, phase = \"8_9\", history = history)\n", + " \n", + " config.train_classes = [0, 1]\n", + " train_model(config, model, phase = \"0_1_again\", history = history)\n", + "\n", + " return history\n", + "\n", + "### END SOLUTION ###\n", + " \n", + "history_catastrophic_forgetting = train_catastrophic_forgetting()\n", + "history_catastrophic_forgetting" + ], + "metadata": { + "id": "OnATcaveP3Fi", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6e9bc36f-8e10-405a-8297-e104141e58cc" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Train Epoch: 1 [0/12665 (0%)]\tLoss: 2.295613\n", + "Train Epoch: 1 [640/12665 (5%)]\tLoss: 1.647854\n", + "Train Epoch: 1 [1280/12665 (10%)]\tLoss: 1.039609\n", + "Train Epoch: 1 [1920/12665 (15%)]\tLoss: 0.593714\n", + "Train Epoch: 1 [2560/12665 (20%)]\tLoss: 0.321345\n", + "Train Epoch: 1 [3200/12665 (25%)]\tLoss: 0.211062\n", + "Train Epoch: 1 [3840/12665 (30%)]\tLoss: 0.124204\n", + "Train Epoch: 1 [4480/12665 (35%)]\tLoss: 0.082856\n", + "Train Epoch: 1 [5120/12665 (40%)]\tLoss: 0.075962\n", + "Train Epoch: 1 [5760/12665 (45%)]\tLoss: 0.071156\n", + "Train Epoch: 1 [6400/12665 (51%)]\tLoss: 0.117059\n", + "Train Epoch: 1 [7040/12665 (56%)]\tLoss: 0.059726\n", + "Train Epoch: 1 [7680/12665 (61%)]\tLoss: 0.032035\n", + "Train Epoch: 1 [8320/12665 (66%)]\tLoss: 0.033078\n", + "Train Epoch: 1 [8960/12665 (71%)]\tLoss: 0.030728\n", + "Train Epoch: 1 [9600/12665 (76%)]\tLoss: 0.039060\n", + "Train Epoch: 1 [10240/12665 (81%)]\tLoss: 0.035301\n", + "Train Epoch: 1 [10880/12665 (86%)]\tLoss: 0.041941\n", + "Train Epoch: 1 [11520/12665 (91%)]\tLoss: 0.040506\n", + "Train Epoch: 1 [12160/12665 (96%)]\tLoss: 0.014235\n", + "\n", + "Test set: Average loss: 7.1276\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12665 (0%)]\tLoss: 0.007759\n", + "Train Epoch: 2 [640/12665 (5%)]\tLoss: 0.029978\n", + "Train Epoch: 2 [1280/12665 (10%)]\tLoss: 0.017544\n", + "Train Epoch: 2 [1920/12665 (15%)]\tLoss: 0.022188\n", + "Train Epoch: 2 [2560/12665 (20%)]\tLoss: 0.009434\n", + "Train Epoch: 2 [3200/12665 (25%)]\tLoss: 0.024381\n", + "Train Epoch: 2 [3840/12665 (30%)]\tLoss: 0.086738\n", + "Train Epoch: 2 [4480/12665 (35%)]\tLoss: 0.020443\n", + "Train Epoch: 2 [5120/12665 (40%)]\tLoss: 0.015766\n", + "Train Epoch: 2 [5760/12665 (45%)]\tLoss: 0.006633\n", + "Train Epoch: 2 [6400/12665 (51%)]\tLoss: 0.007944\n", + "Train Epoch: 2 [7040/12665 (56%)]\tLoss: 0.008917\n", + "Train Epoch: 2 [7680/12665 (61%)]\tLoss: 0.004392\n", + "Train Epoch: 2 [8320/12665 (66%)]\tLoss: 0.008756\n", + "Train Epoch: 2 [8960/12665 (71%)]\tLoss: 0.056707\n", + "Train Epoch: 2 [9600/12665 (76%)]\tLoss: 0.005973\n", + "Train Epoch: 2 [10240/12665 (81%)]\tLoss: 0.008020\n", + "Train Epoch: 2 [10880/12665 (86%)]\tLoss: 0.009416\n", + "Train Epoch: 2 [11520/12665 (91%)]\tLoss: 0.017660\n", + "Train Epoch: 2 [12160/12665 (96%)]\tLoss: 0.010692\n", + "\n", + "Test set: Average loss: 8.1468\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12665 (0%)]\tLoss: 0.016127\n", + "Train Epoch: 3 [640/12665 (5%)]\tLoss: 0.018997\n", + "Train Epoch: 3 [1280/12665 (10%)]\tLoss: 0.004281\n", + "Train Epoch: 3 [1920/12665 (15%)]\tLoss: 0.004884\n", + "Train Epoch: 3 [2560/12665 (20%)]\tLoss: 0.006038\n", + "Train Epoch: 3 [3200/12665 (25%)]\tLoss: 0.012006\n", + "Train Epoch: 3 [3840/12665 (30%)]\tLoss: 0.009289\n", + "Train Epoch: 3 [4480/12665 (35%)]\tLoss: 0.002473\n", + "Train Epoch: 3 [5120/12665 (40%)]\tLoss: 0.002702\n", + "Train Epoch: 3 [5760/12665 (45%)]\tLoss: 0.012154\n", + "Train Epoch: 3 [6400/12665 (51%)]\tLoss: 0.018935\n", + "Train Epoch: 3 [7040/12665 (56%)]\tLoss: 0.004237\n", + "Train Epoch: 3 [7680/12665 (61%)]\tLoss: 0.003406\n", + "Train Epoch: 3 [8320/12665 (66%)]\tLoss: 0.008378\n", + "Train Epoch: 3 [8960/12665 (71%)]\tLoss: 0.003461\n", + "Train Epoch: 3 [9600/12665 (76%)]\tLoss: 0.018804\n", + "Train Epoch: 3 [10240/12665 (81%)]\tLoss: 0.015821\n", + "Train Epoch: 3 [10880/12665 (86%)]\tLoss: 0.003116\n", + "Train Epoch: 3 [11520/12665 (91%)]\tLoss: 0.002931\n", + "Train Epoch: 3 [12160/12665 (96%)]\tLoss: 0.004047\n", + "\n", + "Test set: Average loss: 8.5887\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/12089 (0%)]\tLoss: 10.857133\n", + "Train Epoch: 1 [640/12089 (5%)]\tLoss: 6.280286\n", + "Train Epoch: 1 [1280/12089 (11%)]\tLoss: 2.301530\n", + "Train Epoch: 1 [1920/12089 (16%)]\tLoss: 0.905669\n", + "Train Epoch: 1 [2560/12089 (21%)]\tLoss: 0.688727\n", + "Train Epoch: 1 [3200/12089 (26%)]\tLoss: 0.598405\n", + "Train Epoch: 1 [3840/12089 (32%)]\tLoss: 0.462726\n", + "Train Epoch: 1 [4480/12089 (37%)]\tLoss: 0.345897\n", + "Train Epoch: 1 [5120/12089 (42%)]\tLoss: 0.380626\n", + "Train Epoch: 1 [5760/12089 (48%)]\tLoss: 0.280428\n", + "Train Epoch: 1 [6400/12089 (53%)]\tLoss: 0.216660\n", + "Train Epoch: 1 [7040/12089 (58%)]\tLoss: 0.167003\n", + "Train Epoch: 1 [7680/12089 (63%)]\tLoss: 0.275916\n", + "Train Epoch: 1 [8320/12089 (69%)]\tLoss: 0.326823\n", + "Train Epoch: 1 [8960/12089 (74%)]\tLoss: 0.258519\n", + "Train Epoch: 1 [9600/12089 (79%)]\tLoss: 0.233105\n", + "Train Epoch: 1 [10240/12089 (85%)]\tLoss: 0.235713\n", + "Train Epoch: 1 [10880/12089 (90%)]\tLoss: 0.265890\n", + "Train Epoch: 1 [11520/12089 (95%)]\tLoss: 0.262226\n", + "\n", + "Test set: Average loss: 6.2382\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 992.0/1032(96%)\n", + "Class 3 accuracy: 987.0/1010(98%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12089 (0%)]\tLoss: 0.099378\n", + "Train Epoch: 2 [640/12089 (5%)]\tLoss: 0.116401\n", + "Train Epoch: 2 [1280/12089 (11%)]\tLoss: 0.155221\n", + "Train Epoch: 2 [1920/12089 (16%)]\tLoss: 0.109446\n", + "Train Epoch: 2 [2560/12089 (21%)]\tLoss: 0.104514\n", + "Train Epoch: 2 [3200/12089 (26%)]\tLoss: 0.219575\n", + "Train Epoch: 2 [3840/12089 (32%)]\tLoss: 0.151700\n", + "Train Epoch: 2 [4480/12089 (37%)]\tLoss: 0.162770\n", + "Train Epoch: 2 [5120/12089 (42%)]\tLoss: 0.152628\n", + "Train Epoch: 2 [5760/12089 (48%)]\tLoss: 0.186006\n", + "Train Epoch: 2 [6400/12089 (53%)]\tLoss: 0.095261\n", + "Train Epoch: 2 [7040/12089 (58%)]\tLoss: 0.152865\n", + "Train Epoch: 2 [7680/12089 (63%)]\tLoss: 0.046197\n", + "Train Epoch: 2 [8320/12089 (69%)]\tLoss: 0.068629\n", + "Train Epoch: 2 [8960/12089 (74%)]\tLoss: 0.133037\n", + "Train Epoch: 2 [9600/12089 (79%)]\tLoss: 0.106119\n", + "Train Epoch: 2 [10240/12089 (85%)]\tLoss: 0.073823\n", + "Train Epoch: 2 [10880/12089 (90%)]\tLoss: 0.117314\n", + "Train Epoch: 2 [11520/12089 (95%)]\tLoss: 0.144778\n", + "\n", + "Test set: Average loss: 7.2467\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 998.0/1032(97%)\n", + "Class 3 accuracy: 994.0/1010(98%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12089 (0%)]\tLoss: 0.102792\n", + "Train Epoch: 3 [640/12089 (5%)]\tLoss: 0.209812\n", + "Train Epoch: 3 [1280/12089 (11%)]\tLoss: 0.079453\n", + "Train Epoch: 3 [1920/12089 (16%)]\tLoss: 0.146311\n", + "Train Epoch: 3 [2560/12089 (21%)]\tLoss: 0.057011\n", + "Train Epoch: 3 [3200/12089 (26%)]\tLoss: 0.062497\n", + "Train Epoch: 3 [3840/12089 (32%)]\tLoss: 0.114005\n", + "Train Epoch: 3 [4480/12089 (37%)]\tLoss: 0.089880\n", + "Train Epoch: 3 [5120/12089 (42%)]\tLoss: 0.057159\n", + "Train Epoch: 3 [5760/12089 (48%)]\tLoss: 0.117361\n", + "Train Epoch: 3 [6400/12089 (53%)]\tLoss: 0.098925\n", + "Train Epoch: 3 [7040/12089 (58%)]\tLoss: 0.069072\n", + "Train Epoch: 3 [7680/12089 (63%)]\tLoss: 0.111345\n", + "Train Epoch: 3 [8320/12089 (69%)]\tLoss: 0.131783\n", + "Train Epoch: 3 [8960/12089 (74%)]\tLoss: 0.150885\n", + "Train Epoch: 3 [9600/12089 (79%)]\tLoss: 0.079096\n", + "Train Epoch: 3 [10240/12089 (85%)]\tLoss: 0.082054\n", + "Train Epoch: 3 [10880/12089 (90%)]\tLoss: 0.129982\n", + "Train Epoch: 3 [11520/12089 (95%)]\tLoss: 0.066340\n", + "\n", + "Test set: Average loss: 7.6576\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 1007.0/1032(98%)\n", + "Class 3 accuracy: 985.0/1010(98%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/11263 (0%)]\tLoss: 10.835564\n", + "Train Epoch: 1 [640/11263 (6%)]\tLoss: 5.729345\n", + "Train Epoch: 1 [1280/11263 (11%)]\tLoss: 2.635014\n", + "Train Epoch: 1 [1920/11263 (17%)]\tLoss: 1.219099\n", + "Train Epoch: 1 [2560/11263 (23%)]\tLoss: 0.913658\n", + "Train Epoch: 1 [3200/11263 (28%)]\tLoss: 0.655098\n", + "Train Epoch: 1 [3840/11263 (34%)]\tLoss: 0.466011\n", + "Train Epoch: 1 [4480/11263 (40%)]\tLoss: 0.539344\n", + "Train Epoch: 1 [5120/11263 (45%)]\tLoss: 0.249651\n", + "Train Epoch: 1 [5760/11263 (51%)]\tLoss: 0.209131\n", + "Train Epoch: 1 [6400/11263 (57%)]\tLoss: 0.223062\n", + "Train Epoch: 1 [7040/11263 (62%)]\tLoss: 0.228752\n", + "Train Epoch: 1 [7680/11263 (68%)]\tLoss: 0.198413\n", + "Train Epoch: 1 [8320/11263 (74%)]\tLoss: 0.215570\n", + "Train Epoch: 1 [8960/11263 (80%)]\tLoss: 0.272983\n", + "Train Epoch: 1 [9600/11263 (85%)]\tLoss: 0.155609\n", + "Train Epoch: 1 [10240/11263 (91%)]\tLoss: 0.087590\n", + "Train Epoch: 1 [10880/11263 (97%)]\tLoss: 0.132957\n", + "\n", + "Test set: Average loss: 7.1306\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 977.0/982(99%)\n", + "Class 5 accuracy: 866.0/892(97%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/11263 (0%)]\tLoss: 0.130704\n", + "Train Epoch: 2 [640/11263 (6%)]\tLoss: 0.123305\n", + "Train Epoch: 2 [1280/11263 (11%)]\tLoss: 0.092606\n", + "Train Epoch: 2 [1920/11263 (17%)]\tLoss: 0.108018\n", + "Train Epoch: 2 [2560/11263 (23%)]\tLoss: 0.059542\n", + "Train Epoch: 2 [3200/11263 (28%)]\tLoss: 0.051525\n", + "Train Epoch: 2 [3840/11263 (34%)]\tLoss: 0.105634\n", + "Train Epoch: 2 [4480/11263 (40%)]\tLoss: 0.075492\n", + "Train Epoch: 2 [5120/11263 (45%)]\tLoss: 0.056117\n", + "Train Epoch: 2 [5760/11263 (51%)]\tLoss: 0.119122\n", + "Train Epoch: 2 [6400/11263 (57%)]\tLoss: 0.098337\n", + "Train Epoch: 2 [7040/11263 (62%)]\tLoss: 0.049512\n", + "Train Epoch: 2 [7680/11263 (68%)]\tLoss: 0.070381\n", + "Train Epoch: 2 [8320/11263 (74%)]\tLoss: 0.070122\n", + "Train Epoch: 2 [8960/11263 (80%)]\tLoss: 0.074574\n", + "Train Epoch: 2 [9600/11263 (85%)]\tLoss: 0.085832\n", + "Train Epoch: 2 [10240/11263 (91%)]\tLoss: 0.194243\n", + "Train Epoch: 2 [10880/11263 (97%)]\tLoss: 0.052719\n", + "\n", + "Test set: Average loss: 8.4438\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 978.0/982(100%)\n", + "Class 5 accuracy: 872.0/892(98%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/11263 (0%)]\tLoss: 0.031168\n", + "Train Epoch: 3 [640/11263 (6%)]\tLoss: 0.133256\n", + "Train Epoch: 3 [1280/11263 (11%)]\tLoss: 0.064342\n", + "Train Epoch: 3 [1920/11263 (17%)]\tLoss: 0.081790\n", + "Train Epoch: 3 [2560/11263 (23%)]\tLoss: 0.055577\n", + "Train Epoch: 3 [3200/11263 (28%)]\tLoss: 0.031944\n", + "Train Epoch: 3 [3840/11263 (34%)]\tLoss: 0.079894\n", + "Train Epoch: 3 [4480/11263 (40%)]\tLoss: 0.054432\n", + "Train Epoch: 3 [5120/11263 (45%)]\tLoss: 0.032932\n", + "Train Epoch: 3 [5760/11263 (51%)]\tLoss: 0.054515\n", + "Train Epoch: 3 [6400/11263 (57%)]\tLoss: 0.015534\n", + "Train Epoch: 3 [7040/11263 (62%)]\tLoss: 0.073943\n", + "Train Epoch: 3 [7680/11263 (68%)]\tLoss: 0.051291\n", + "Train Epoch: 3 [8320/11263 (74%)]\tLoss: 0.071271\n", + "Train Epoch: 3 [8960/11263 (80%)]\tLoss: 0.078468\n", + "Train Epoch: 3 [9600/11263 (85%)]\tLoss: 0.074505\n", + "Train Epoch: 3 [10240/11263 (91%)]\tLoss: 0.041854\n", + "Train Epoch: 3 [10880/11263 (97%)]\tLoss: 0.051243\n", + "\n", + "Test set: Average loss: 9.0650\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 978.0/982(100%)\n", + "Class 5 accuracy: 879.0/892(99%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/12183 (0%)]\tLoss: 12.640953\n", + "Train Epoch: 1 [640/12183 (5%)]\tLoss: 6.948784\n", + "Train Epoch: 1 [1280/12183 (10%)]\tLoss: 2.239110\n", + "Train Epoch: 1 [1920/12183 (16%)]\tLoss: 0.789898\n", + "Train Epoch: 1 [2560/12183 (21%)]\tLoss: 0.433876\n", + "Train Epoch: 1 [3200/12183 (26%)]\tLoss: 0.327010\n", + "Train Epoch: 1 [3840/12183 (31%)]\tLoss: 0.240610\n", + "Train Epoch: 1 [4480/12183 (37%)]\tLoss: 0.189328\n", + "Train Epoch: 1 [5120/12183 (42%)]\tLoss: 0.189419\n", + "Train Epoch: 1 [5760/12183 (47%)]\tLoss: 0.063147\n", + "Train Epoch: 1 [6400/12183 (52%)]\tLoss: 0.061185\n", + "Train Epoch: 1 [7040/12183 (58%)]\tLoss: 0.115183\n", + "Train Epoch: 1 [7680/12183 (63%)]\tLoss: 0.030512\n", + "Train Epoch: 1 [8320/12183 (68%)]\tLoss: 0.037145\n", + "Train Epoch: 1 [8960/12183 (73%)]\tLoss: 0.089052\n", + "Train Epoch: 1 [9600/12183 (79%)]\tLoss: 0.044766\n", + "Train Epoch: 1 [10240/12183 (84%)]\tLoss: 0.027388\n", + "Train Epoch: 1 [10880/12183 (89%)]\tLoss: 0.041345\n", + "Train Epoch: 1 [11520/12183 (94%)]\tLoss: 0.022225\n", + "Train Epoch: 1 [4370/12183 (99%)]\tLoss: 0.004926\n", + "\n", + "Test set: Average loss: 7.6796\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 955.0/958(100%)\n", + "Class 7 accuracy: 1017.0/1028(99%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12183 (0%)]\tLoss: 0.056296\n", + "Train Epoch: 2 [640/12183 (5%)]\tLoss: 0.026770\n", + "Train Epoch: 2 [1280/12183 (10%)]\tLoss: 0.014056\n", + "Train Epoch: 2 [1920/12183 (16%)]\tLoss: 0.026122\n", + "Train Epoch: 2 [2560/12183 (21%)]\tLoss: 0.025161\n", + "Train Epoch: 2 [3200/12183 (26%)]\tLoss: 0.033366\n", + "Train Epoch: 2 [3840/12183 (31%)]\tLoss: 0.011129\n", + "Train Epoch: 2 [4480/12183 (37%)]\tLoss: 0.034492\n", + "Train Epoch: 2 [5120/12183 (42%)]\tLoss: 0.009984\n", + "Train Epoch: 2 [5760/12183 (47%)]\tLoss: 0.035312\n", + "Train Epoch: 2 [6400/12183 (52%)]\tLoss: 0.028434\n", + "Train Epoch: 2 [7040/12183 (58%)]\tLoss: 0.012921\n", + "Train Epoch: 2 [7680/12183 (63%)]\tLoss: 0.009203\n", + "Train Epoch: 2 [8320/12183 (68%)]\tLoss: 0.034064\n", + "Train Epoch: 2 [8960/12183 (73%)]\tLoss: 0.018005\n", + "Train Epoch: 2 [9600/12183 (79%)]\tLoss: 0.007107\n", + "Train Epoch: 2 [10240/12183 (84%)]\tLoss: 0.003789\n", + "Train Epoch: 2 [10880/12183 (89%)]\tLoss: 0.056796\n", + "Train Epoch: 2 [11520/12183 (94%)]\tLoss: 0.008388\n", + "Train Epoch: 2 [4370/12183 (99%)]\tLoss: 0.008049\n", + "\n", + "Test set: Average loss: 8.7098\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 955.0/958(100%)\n", + "Class 7 accuracy: 1021.0/1028(99%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12183 (0%)]\tLoss: 0.031829\n", + "Train Epoch: 3 [640/12183 (5%)]\tLoss: 0.026151\n", + "Train Epoch: 3 [1280/12183 (10%)]\tLoss: 0.013025\n", + "Train Epoch: 3 [1920/12183 (16%)]\tLoss: 0.015742\n", + "Train Epoch: 3 [2560/12183 (21%)]\tLoss: 0.036039\n", + "Train Epoch: 3 [3200/12183 (26%)]\tLoss: 0.019850\n", + "Train Epoch: 3 [3840/12183 (31%)]\tLoss: 0.021591\n", + "Train Epoch: 3 [4480/12183 (37%)]\tLoss: 0.011566\n", + "Train Epoch: 3 [5120/12183 (42%)]\tLoss: 0.012161\n", + "Train Epoch: 3 [5760/12183 (47%)]\tLoss: 0.005265\n", + "Train Epoch: 3 [6400/12183 (52%)]\tLoss: 0.005189\n", + "Train Epoch: 3 [7040/12183 (58%)]\tLoss: 0.023125\n", + "Train Epoch: 3 [7680/12183 (63%)]\tLoss: 0.058819\n", + "Train Epoch: 3 [8320/12183 (68%)]\tLoss: 0.027194\n", + "Train Epoch: 3 [8960/12183 (73%)]\tLoss: 0.010728\n", + "Train Epoch: 3 [9600/12183 (79%)]\tLoss: 0.002767\n", + "Train Epoch: 3 [10240/12183 (84%)]\tLoss: 0.006029\n", + "Train Epoch: 3 [10880/12183 (89%)]\tLoss: 0.090709\n", + "Train Epoch: 3 [11520/12183 (94%)]\tLoss: 0.003533\n", + "Train Epoch: 3 [4370/12183 (99%)]\tLoss: 0.005167\n", + "\n", + "Test set: Average loss: 9.1796\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 955.0/958(100%)\n", + "Class 7 accuracy: 1021.0/1028(99%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/11800 (0%)]\tLoss: 14.120369\n", + "Train Epoch: 1 [640/11800 (5%)]\tLoss: 7.705572\n", + "Train Epoch: 1 [1280/11800 (11%)]\tLoss: 2.772657\n", + "Train Epoch: 1 [1920/11800 (16%)]\tLoss: 1.523421\n", + "Train Epoch: 1 [2560/11800 (22%)]\tLoss: 0.632249\n", + "Train Epoch: 1 [3200/11800 (27%)]\tLoss: 0.823988\n", + "Train Epoch: 1 [3840/11800 (32%)]\tLoss: 0.649929\n", + "Train Epoch: 1 [4480/11800 (38%)]\tLoss: 0.382820\n", + "Train Epoch: 1 [5120/11800 (43%)]\tLoss: 0.287871\n", + "Train Epoch: 1 [5760/11800 (49%)]\tLoss: 0.270225\n", + "Train Epoch: 1 [6400/11800 (54%)]\tLoss: 0.250052\n", + "Train Epoch: 1 [7040/11800 (59%)]\tLoss: 0.436681\n", + "Train Epoch: 1 [7680/11800 (65%)]\tLoss: 0.205961\n", + "Train Epoch: 1 [8320/11800 (70%)]\tLoss: 0.226867\n", + "Train Epoch: 1 [8960/11800 (76%)]\tLoss: 0.178260\n", + "Train Epoch: 1 [9600/11800 (81%)]\tLoss: 0.159317\n", + "Train Epoch: 1 [10240/11800 (86%)]\tLoss: 0.402756\n", + "Train Epoch: 1 [10880/11800 (92%)]\tLoss: 0.158059\n", + "Train Epoch: 1 [11520/11800 (97%)]\tLoss: 0.195788\n", + "\n", + "Test set: Average loss: 5.9943\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 943.0/974(97%)\n", + "Class 9 accuracy: 974.0/1009(97%)\n", + "Train Epoch: 2 [0/11800 (0%)]\tLoss: 0.157916\n", + "Train Epoch: 2 [640/11800 (5%)]\tLoss: 0.187881\n", + "Train Epoch: 2 [1280/11800 (11%)]\tLoss: 0.283773\n", + "Train Epoch: 2 [1920/11800 (16%)]\tLoss: 0.135888\n", + "Train Epoch: 2 [2560/11800 (22%)]\tLoss: 0.211785\n", + "Train Epoch: 2 [3200/11800 (27%)]\tLoss: 0.238753\n", + "Train Epoch: 2 [3840/11800 (32%)]\tLoss: 0.121974\n", + "Train Epoch: 2 [4480/11800 (38%)]\tLoss: 0.074522\n", + "Train Epoch: 2 [5120/11800 (43%)]\tLoss: 0.239114\n", + "Train Epoch: 2 [5760/11800 (49%)]\tLoss: 0.129581\n", + "Train Epoch: 2 [6400/11800 (54%)]\tLoss: 0.055795\n", + "Train Epoch: 2 [7040/11800 (59%)]\tLoss: 0.349395\n", + "Train Epoch: 2 [7680/11800 (65%)]\tLoss: 0.076350\n", + "Train Epoch: 2 [8320/11800 (70%)]\tLoss: 0.072271\n", + "Train Epoch: 2 [8960/11800 (76%)]\tLoss: 0.103121\n", + "Train Epoch: 2 [9600/11800 (81%)]\tLoss: 0.343085\n", + "Train Epoch: 2 [10240/11800 (86%)]\tLoss: 0.095953\n", + "Train Epoch: 2 [10880/11800 (92%)]\tLoss: 0.095618\n", + "Train Epoch: 2 [11520/11800 (97%)]\tLoss: 0.114838\n", + "\n", + "Test set: Average loss: 6.6632\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 967.0/974(99%)\n", + "Class 9 accuracy: 965.0/1009(96%)\n", + "Train Epoch: 3 [0/11800 (0%)]\tLoss: 0.126834\n", + "Train Epoch: 3 [640/11800 (5%)]\tLoss: 0.187850\n", + "Train Epoch: 3 [1280/11800 (11%)]\tLoss: 0.102141\n", + "Train Epoch: 3 [1920/11800 (16%)]\tLoss: 0.036415\n", + "Train Epoch: 3 [2560/11800 (22%)]\tLoss: 0.165435\n", + "Train Epoch: 3 [3200/11800 (27%)]\tLoss: 0.109672\n", + "Train Epoch: 3 [3840/11800 (32%)]\tLoss: 0.070627\n", + "Train Epoch: 3 [4480/11800 (38%)]\tLoss: 0.047646\n", + "Train Epoch: 3 [5120/11800 (43%)]\tLoss: 0.051905\n", + "Train Epoch: 3 [5760/11800 (49%)]\tLoss: 0.264070\n", + "Train Epoch: 3 [6400/11800 (54%)]\tLoss: 0.211393\n", + "Train Epoch: 3 [7040/11800 (59%)]\tLoss: 0.062177\n", + "Train Epoch: 3 [7680/11800 (65%)]\tLoss: 0.033032\n", + "Train Epoch: 3 [8320/11800 (70%)]\tLoss: 0.068230\n", + "Train Epoch: 3 [8960/11800 (76%)]\tLoss: 0.071904\n", + "Train Epoch: 3 [9600/11800 (81%)]\tLoss: 0.102863\n", + "Train Epoch: 3 [10240/11800 (86%)]\tLoss: 0.046137\n", + "Train Epoch: 3 [10880/11800 (92%)]\tLoss: 0.120950\n", + "Train Epoch: 3 [11520/11800 (97%)]\tLoss: 0.101907\n", + "\n", + "Test set: Average loss: 6.9242\n", + "Class 0 accuracy: 0.0/980(0%)\n", + "Class 1 accuracy: 0.0/1135(0%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 952.0/974(98%)\n", + "Class 9 accuracy: 978.0/1009(97%)\n", + "Train Epoch: 1 [0/12665 (0%)]\tLoss: 8.722752\n", + "Train Epoch: 1 [640/12665 (5%)]\tLoss: 3.160372\n", + "Train Epoch: 1 [1280/12665 (10%)]\tLoss: 0.653003\n", + "Train Epoch: 1 [1920/12665 (15%)]\tLoss: 0.256268\n", + "Train Epoch: 1 [2560/12665 (20%)]\tLoss: 0.064630\n", + "Train Epoch: 1 [3200/12665 (25%)]\tLoss: 0.089074\n", + "Train Epoch: 1 [3840/12665 (30%)]\tLoss: 0.022682\n", + "Train Epoch: 1 [4480/12665 (35%)]\tLoss: 0.014132\n", + "Train Epoch: 1 [5120/12665 (40%)]\tLoss: 0.011369\n", + "Train Epoch: 1 [5760/12665 (45%)]\tLoss: 0.032196\n", + "Train Epoch: 1 [6400/12665 (51%)]\tLoss: 0.087249\n", + "Train Epoch: 1 [7040/12665 (56%)]\tLoss: 0.010759\n", + "Train Epoch: 1 [7680/12665 (61%)]\tLoss: 0.009488\n", + "Train Epoch: 1 [8320/12665 (66%)]\tLoss: 0.009431\n", + "Train Epoch: 1 [8960/12665 (71%)]\tLoss: 0.017381\n", + "Train Epoch: 1 [9600/12665 (76%)]\tLoss: 0.014684\n", + "Train Epoch: 1 [10240/12665 (81%)]\tLoss: 0.007916\n", + "Train Epoch: 1 [10880/12665 (86%)]\tLoss: 0.008834\n", + "Train Epoch: 1 [11520/12665 (91%)]\tLoss: 0.082196\n", + "Train Epoch: 1 [12160/12665 (96%)]\tLoss: 0.002452\n", + "\n", + "Test set: Average loss: 7.1540\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12665 (0%)]\tLoss: 0.000673\n", + "Train Epoch: 2 [640/12665 (5%)]\tLoss: 0.029478\n", + "Train Epoch: 2 [1280/12665 (10%)]\tLoss: 0.002406\n", + "Train Epoch: 2 [1920/12665 (15%)]\tLoss: 0.008619\n", + "Train Epoch: 2 [2560/12665 (20%)]\tLoss: 0.001777\n", + "Train Epoch: 2 [3200/12665 (25%)]\tLoss: 0.031666\n", + "Train Epoch: 2 [3840/12665 (30%)]\tLoss: 0.133443\n", + "Train Epoch: 2 [4480/12665 (35%)]\tLoss: 0.006141\n", + "Train Epoch: 2 [5120/12665 (40%)]\tLoss: 0.006000\n", + "Train Epoch: 2 [5760/12665 (45%)]\tLoss: 0.003495\n", + "Train Epoch: 2 [6400/12665 (51%)]\tLoss: 0.000851\n", + "Train Epoch: 2 [7040/12665 (56%)]\tLoss: 0.001280\n", + "Train Epoch: 2 [7680/12665 (61%)]\tLoss: 0.000972\n", + "Train Epoch: 2 [8320/12665 (66%)]\tLoss: 0.001776\n", + "Train Epoch: 2 [8960/12665 (71%)]\tLoss: 0.067486\n", + "Train Epoch: 2 [9600/12665 (76%)]\tLoss: 0.001030\n", + "Train Epoch: 2 [10240/12665 (81%)]\tLoss: 0.001892\n", + "Train Epoch: 2 [10880/12665 (86%)]\tLoss: 0.001493\n", + "Train Epoch: 2 [11520/12665 (91%)]\tLoss: 0.047196\n", + "Train Epoch: 2 [12160/12665 (96%)]\tLoss: 0.004952\n", + "\n", + "Test set: Average loss: 7.8296\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12665 (0%)]\tLoss: 0.007902\n", + "Train Epoch: 3 [640/12665 (5%)]\tLoss: 0.003385\n", + "Train Epoch: 3 [1280/12665 (10%)]\tLoss: 0.001230\n", + "Train Epoch: 3 [1920/12665 (15%)]\tLoss: 0.001810\n", + "Train Epoch: 3 [2560/12665 (20%)]\tLoss: 0.001579\n", + "Train Epoch: 3 [3200/12665 (25%)]\tLoss: 0.028920\n", + "Train Epoch: 3 [3840/12665 (30%)]\tLoss: 0.004439\n", + "Train Epoch: 3 [4480/12665 (35%)]\tLoss: 0.001913\n", + "Train Epoch: 3 [5120/12665 (40%)]\tLoss: 0.000407\n", + "Train Epoch: 3 [5760/12665 (45%)]\tLoss: 0.004402\n", + "Train Epoch: 3 [6400/12665 (51%)]\tLoss: 0.009100\n", + "Train Epoch: 3 [7040/12665 (56%)]\tLoss: 0.000980\n", + "Train Epoch: 3 [7680/12665 (61%)]\tLoss: 0.000387\n", + "Train Epoch: 3 [8320/12665 (66%)]\tLoss: 0.004606\n", + "Train Epoch: 3 [8960/12665 (71%)]\tLoss: 0.001144\n", + "Train Epoch: 3 [9600/12665 (76%)]\tLoss: 0.007978\n", + "Train Epoch: 3 [10240/12665 (81%)]\tLoss: 0.011006\n", + "Train Epoch: 3 [10880/12665 (86%)]\tLoss: 0.001300\n", + "Train Epoch: 3 [11520/12665 (91%)]\tLoss: 0.000758\n", + "Train Epoch: 3 [12160/12665 (96%)]\tLoss: 0.001379\n", + "\n", + "Test set: Average loss: 8.1397\n", + "Class 0 accuracy: 978.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{0: 0.996938775510204,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.9612403100775194,\n", + " 3: 0.9772277227722772,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.9670542635658915,\n", + " 3: 0.9841584158415841,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.9757751937984496,\n", + " 3: 0.9752475247524752,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.994908350305499,\n", + " 5: 0.9708520179372198,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.9959266802443992,\n", + " 5: 0.9775784753363229,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.9959266802443992,\n", + " 5: 0.9854260089686099,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.9968684759916493,\n", + " 7: 0.9892996108949417,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.9968684759916493,\n", + " 7: 0.9931906614785992,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.9968684759916493,\n", + " 7: 0.9931906614785992,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.9681724845995893,\n", + " 9: 0.9653121902874133,\n", + " 'phase': '8_9'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.9928131416837782,\n", + " 9: 0.956392467789891,\n", + " 'phase': '8_9'},\n", + " {0: 0.0,\n", + " 1: 0.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.9774127310061602,\n", + " 9: 0.9692765113974232,\n", + " 'phase': '8_9'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1_again'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1_again'},\n", + " {0: 0.9979591836734694,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1_again'}]" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Exercise 2: Implementing the previous exercise should have shown that the network\n", + "# suffers from catastrophic forgetting. To fix this, implement a memory replay buffer\n", + "# and use this buffer to counteract the catastrophic forgetting.\n", + "#\n", + "# Implementation requires adaptation of the cells above, plus the addition of a new\n", + "# experiment setup below.\n", + "\n", + "\n", + "### START SOLUTION ###\n", + "# The experiment setup is identical to the one above, but now we initialize and use\n", + "# a replay buffer. Right now, the buffer only stores a single image for each class.\n", + "# As a bonus exercise, explore how different variants of the replay buffer affect the\n", + "# resulting model performance.\n", + "\n", + "def train_memory_replay():\n", + " model = Net()\n", + " history = []\n", + " buffer = Buffer()\n", + "\n", + " config.train_classes = [0, 1]\n", + " train_model(config, model, phase = \"0_1\", history = history, buffer = buffer)\n", + " \n", + " config.train_classes = [2, 3]\n", + " train_model(config, model, phase = \"2_3\", history = history, buffer = buffer)\n", + "\n", + " config.train_classes = [4, 5]\n", + " train_model(config, model, phase = \"4_5\", history = history, buffer = buffer)\n", + "\n", + " config.train_classes = [6, 7]\n", + " train_model(config, model, phase = \"6_7\", history = history, buffer = buffer)\n", + "\n", + " config.train_classes = [8, 9]\n", + " train_model(config, model, phase = \"8_9\", history = history, buffer = buffer)\n", + " \n", + " config.train_classes = [0, 1]\n", + " train_model(config, model, phase = \"0_1_again\", history = history, buffer = buffer)\n", + "\n", + " return history\n", + "\n", + "### END SOLUTION ###\n", + "\n", + "history_memory_replay = train_memory_replay()\n", + "history_memory_replay" + ], + "metadata": { + "id": "LtWvHl_tQCpg", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6705c5fe-9838-4da5-a562-77d7c9a8c6d8" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Train Epoch: 1 [0/12665 (0%)]\tLoss: 2.196357\n", + "Train Epoch: 1 [640/12665 (5%)]\tLoss: 1.335955\n", + "Train Epoch: 1 [1280/12665 (10%)]\tLoss: 0.555878\n", + "Train Epoch: 1 [1920/12665 (15%)]\tLoss: 0.146986\n", + "Train Epoch: 1 [2560/12665 (20%)]\tLoss: 0.082966\n", + "Train Epoch: 1 [3200/12665 (25%)]\tLoss: 0.054255\n", + "Train Epoch: 1 [3840/12665 (30%)]\tLoss: 0.011100\n", + "Train Epoch: 1 [4480/12665 (35%)]\tLoss: 0.078007\n", + "Train Epoch: 1 [5120/12665 (40%)]\tLoss: 0.005687\n", + "Train Epoch: 1 [5760/12665 (45%)]\tLoss: 0.004260\n", + "Train Epoch: 1 [6400/12665 (51%)]\tLoss: 0.002415\n", + "Train Epoch: 1 [7040/12665 (56%)]\tLoss: 0.005845\n", + "Train Epoch: 1 [7680/12665 (61%)]\tLoss: 0.005518\n", + "Train Epoch: 1 [8320/12665 (66%)]\tLoss: 0.001475\n", + "Train Epoch: 1 [8960/12665 (71%)]\tLoss: 0.002208\n", + "Train Epoch: 1 [9600/12665 (76%)]\tLoss: 0.000701\n", + "Train Epoch: 1 [10240/12665 (81%)]\tLoss: 0.000352\n", + "Train Epoch: 1 [10880/12665 (86%)]\tLoss: 0.000833\n", + "Train Epoch: 1 [11520/12665 (91%)]\tLoss: 0.002580\n", + "Train Epoch: 1 [12160/12665 (96%)]\tLoss: 0.002562\n", + "\n", + "Test set: Average loss: 7.8370\n", + "Class 0 accuracy: 976.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12665 (0%)]\tLoss: 0.221930\n", + "Train Epoch: 2 [640/12665 (5%)]\tLoss: 0.027592\n", + "Train Epoch: 2 [1280/12665 (10%)]\tLoss: 0.065451\n", + "Train Epoch: 2 [1920/12665 (15%)]\tLoss: 0.015034\n", + "Train Epoch: 2 [2560/12665 (20%)]\tLoss: 0.046994\n", + "Train Epoch: 2 [3200/12665 (25%)]\tLoss: 0.008316\n", + "Train Epoch: 2 [3840/12665 (30%)]\tLoss: 0.021686\n", + "Train Epoch: 2 [4480/12665 (35%)]\tLoss: 0.024137\n", + "Train Epoch: 2 [5120/12665 (40%)]\tLoss: 0.002627\n", + "Train Epoch: 2 [5760/12665 (45%)]\tLoss: 0.042552\n", + "Train Epoch: 2 [6400/12665 (51%)]\tLoss: 0.026033\n", + "Train Epoch: 2 [7040/12665 (56%)]\tLoss: 0.002244\n", + "Train Epoch: 2 [7680/12665 (61%)]\tLoss: 0.003471\n", + "Train Epoch: 2 [8320/12665 (66%)]\tLoss: 0.041315\n", + "Train Epoch: 2 [8960/12665 (71%)]\tLoss: 0.008438\n", + "Train Epoch: 2 [9600/12665 (76%)]\tLoss: 0.000700\n", + "Train Epoch: 2 [10240/12665 (81%)]\tLoss: 0.000417\n", + "Train Epoch: 2 [10880/12665 (86%)]\tLoss: 0.002115\n", + "Train Epoch: 2 [11520/12665 (91%)]\tLoss: 0.008961\n", + "Train Epoch: 2 [12160/12665 (96%)]\tLoss: 0.002133\n", + "\n", + "Test set: Average loss: 8.7829\n", + "Class 0 accuracy: 976.0/980(100%)\n", + "Class 1 accuracy: 1135.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12665 (0%)]\tLoss: 0.000570\n", + "Train Epoch: 3 [640/12665 (5%)]\tLoss: 0.011992\n", + "Train Epoch: 3 [1280/12665 (10%)]\tLoss: 0.000725\n", + "Train Epoch: 3 [1920/12665 (15%)]\tLoss: 0.000835\n", + "Train Epoch: 3 [2560/12665 (20%)]\tLoss: 0.000185\n", + "Train Epoch: 3 [3200/12665 (25%)]\tLoss: 0.001194\n", + "Train Epoch: 3 [3840/12665 (30%)]\tLoss: 0.000802\n", + "Train Epoch: 3 [4480/12665 (35%)]\tLoss: 0.001044\n", + "Train Epoch: 3 [5120/12665 (40%)]\tLoss: 0.001886\n", + "Train Epoch: 3 [5760/12665 (45%)]\tLoss: 0.001518\n", + "Train Epoch: 3 [6400/12665 (51%)]\tLoss: 0.001240\n", + "Train Epoch: 3 [7040/12665 (56%)]\tLoss: 0.005406\n", + "Train Epoch: 3 [7680/12665 (61%)]\tLoss: 0.004714\n", + "Train Epoch: 3 [8320/12665 (66%)]\tLoss: 0.000870\n", + "Train Epoch: 3 [8960/12665 (71%)]\tLoss: 0.001174\n", + "Train Epoch: 3 [9600/12665 (76%)]\tLoss: 0.000833\n", + "Train Epoch: 3 [10240/12665 (81%)]\tLoss: 0.006711\n", + "Train Epoch: 3 [10880/12665 (86%)]\tLoss: 0.006384\n", + "Train Epoch: 3 [11520/12665 (91%)]\tLoss: 0.006488\n", + "Train Epoch: 3 [12160/12665 (96%)]\tLoss: 0.000901\n", + "\n", + "Test set: Average loss: 9.2011\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1135.0/1135(100%)\n", + "Class 2 accuracy: 0.0/1032(0%)\n", + "Class 3 accuracy: 0.0/1010(0%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/12089 (0%)]\tLoss: 2.805099\n", + "Train Epoch: 1 [640/12089 (5%)]\tLoss: 1.660801\n", + "Train Epoch: 1 [1280/12089 (11%)]\tLoss: 0.437137\n", + "Train Epoch: 1 [1920/12089 (16%)]\tLoss: 0.808282\n", + "Train Epoch: 1 [2560/12089 (21%)]\tLoss: 0.285198\n", + "Train Epoch: 1 [3200/12089 (26%)]\tLoss: 0.129722\n", + "Train Epoch: 1 [3840/12089 (32%)]\tLoss: 0.145888\n", + "Train Epoch: 1 [4480/12089 (37%)]\tLoss: 0.343596\n", + "Train Epoch: 1 [5120/12089 (42%)]\tLoss: 0.078071\n", + "Train Epoch: 1 [5760/12089 (48%)]\tLoss: 0.098522\n", + "Train Epoch: 1 [6400/12089 (53%)]\tLoss: 0.089895\n", + "Train Epoch: 1 [7040/12089 (58%)]\tLoss: 0.067733\n", + "Train Epoch: 1 [7680/12089 (63%)]\tLoss: 0.046314\n", + "Train Epoch: 1 [8320/12089 (69%)]\tLoss: 0.028943\n", + "Train Epoch: 1 [8960/12089 (74%)]\tLoss: 0.082591\n", + "Train Epoch: 1 [9600/12089 (79%)]\tLoss: 0.024760\n", + "Train Epoch: 1 [10240/12089 (85%)]\tLoss: 0.050374\n", + "Train Epoch: 1 [10880/12089 (90%)]\tLoss: 0.020318\n", + "Train Epoch: 1 [11520/12089 (95%)]\tLoss: 0.025210\n", + "\n", + "Test set: Average loss: 5.2845\n", + "Class 0 accuracy: 829.0/980(85%)\n", + "Class 1 accuracy: 1046.0/1135(92%)\n", + "Class 2 accuracy: 991.0/1032(96%)\n", + "Class 3 accuracy: 983.0/1010(97%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12089 (0%)]\tLoss: 0.091748\n", + "Train Epoch: 2 [640/12089 (5%)]\tLoss: 0.038480\n", + "Train Epoch: 2 [1280/12089 (11%)]\tLoss: 0.027258\n", + "Train Epoch: 2 [1920/12089 (16%)]\tLoss: 0.040072\n", + "Train Epoch: 2 [2560/12089 (21%)]\tLoss: 0.024616\n", + "Train Epoch: 2 [3200/12089 (26%)]\tLoss: 0.021542\n", + "Train Epoch: 2 [3840/12089 (32%)]\tLoss: 0.016757\n", + "Train Epoch: 2 [4480/12089 (37%)]\tLoss: 0.029563\n", + "Train Epoch: 2 [5120/12089 (42%)]\tLoss: 0.010378\n", + "Train Epoch: 2 [5760/12089 (48%)]\tLoss: 0.020319\n", + "Train Epoch: 2 [6400/12089 (53%)]\tLoss: 0.019660\n", + "Train Epoch: 2 [7040/12089 (58%)]\tLoss: 0.006761\n", + "Train Epoch: 2 [7680/12089 (63%)]\tLoss: 0.026263\n", + "Train Epoch: 2 [8320/12089 (69%)]\tLoss: 0.008666\n", + "Train Epoch: 2 [8960/12089 (74%)]\tLoss: 0.013218\n", + "Train Epoch: 2 [9600/12089 (79%)]\tLoss: 0.002491\n", + "Train Epoch: 2 [10240/12089 (85%)]\tLoss: 0.010161\n", + "Train Epoch: 2 [10880/12089 (90%)]\tLoss: 0.019670\n", + "Train Epoch: 2 [11520/12089 (95%)]\tLoss: 0.012468\n", + "\n", + "Test set: Average loss: 6.1435\n", + "Class 0 accuracy: 764.0/980(78%)\n", + "Class 1 accuracy: 999.0/1135(88%)\n", + "Class 2 accuracy: 1000.0/1032(97%)\n", + "Class 3 accuracy: 988.0/1010(98%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12089 (0%)]\tLoss: 0.028908\n", + "Train Epoch: 3 [640/12089 (5%)]\tLoss: 0.017523\n", + "Train Epoch: 3 [1280/12089 (11%)]\tLoss: 0.012286\n", + "Train Epoch: 3 [1920/12089 (16%)]\tLoss: 0.029993\n", + "Train Epoch: 3 [2560/12089 (21%)]\tLoss: 0.014532\n", + "Train Epoch: 3 [3200/12089 (26%)]\tLoss: 0.023068\n", + "Train Epoch: 3 [3840/12089 (32%)]\tLoss: 0.007645\n", + "Train Epoch: 3 [4480/12089 (37%)]\tLoss: 0.016837\n", + "Train Epoch: 3 [5120/12089 (42%)]\tLoss: 0.004771\n", + "Train Epoch: 3 [5760/12089 (48%)]\tLoss: 0.004505\n", + "Train Epoch: 3 [6400/12089 (53%)]\tLoss: 0.085267\n", + "Train Epoch: 3 [7040/12089 (58%)]\tLoss: 0.007249\n", + "Train Epoch: 3 [7680/12089 (63%)]\tLoss: 0.005857\n", + "Train Epoch: 3 [8320/12089 (69%)]\tLoss: 0.036750\n", + "Train Epoch: 3 [8960/12089 (74%)]\tLoss: 0.035684\n", + "Train Epoch: 3 [9600/12089 (79%)]\tLoss: 0.005433\n", + "Train Epoch: 3 [10240/12089 (85%)]\tLoss: 0.006491\n", + "Train Epoch: 3 [10880/12089 (90%)]\tLoss: 0.026140\n", + "Train Epoch: 3 [11520/12089 (95%)]\tLoss: 0.007269\n", + "\n", + "Test set: Average loss: 6.5537\n", + "Class 0 accuracy: 723.0/980(74%)\n", + "Class 1 accuracy: 968.0/1135(85%)\n", + "Class 2 accuracy: 999.0/1032(97%)\n", + "Class 3 accuracy: 992.0/1010(98%)\n", + "Class 4 accuracy: 0.0/982(0%)\n", + "Class 5 accuracy: 0.0/892(0%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/11263 (0%)]\tLoss: 1.635322\n", + "Train Epoch: 1 [640/11263 (6%)]\tLoss: 0.442154\n", + "Train Epoch: 1 [1280/11263 (11%)]\tLoss: 0.249078\n", + "Train Epoch: 1 [1920/11263 (17%)]\tLoss: 0.270407\n", + "Train Epoch: 1 [2560/11263 (23%)]\tLoss: 0.180369\n", + "Train Epoch: 1 [3200/11263 (28%)]\tLoss: 0.088140\n", + "Train Epoch: 1 [3840/11263 (34%)]\tLoss: 0.171120\n", + "Train Epoch: 1 [4480/11263 (40%)]\tLoss: 0.263797\n", + "Train Epoch: 1 [5120/11263 (45%)]\tLoss: 0.111911\n", + "Train Epoch: 1 [5760/11263 (51%)]\tLoss: 0.117878\n", + "Train Epoch: 1 [6400/11263 (57%)]\tLoss: 0.033867\n", + "Train Epoch: 1 [7040/11263 (62%)]\tLoss: 0.058040\n", + "Train Epoch: 1 [7680/11263 (68%)]\tLoss: 0.034263\n", + "Train Epoch: 1 [8320/11263 (74%)]\tLoss: 0.082758\n", + "Train Epoch: 1 [8960/11263 (80%)]\tLoss: 0.041592\n", + "Train Epoch: 1 [9600/11263 (85%)]\tLoss: 0.035437\n", + "Train Epoch: 1 [10240/11263 (91%)]\tLoss: 0.015268\n", + "Train Epoch: 1 [10880/11263 (97%)]\tLoss: 0.029453\n", + "\n", + "Test set: Average loss: 4.5940\n", + "Class 0 accuracy: 760.0/980(78%)\n", + "Class 1 accuracy: 986.0/1135(87%)\n", + "Class 2 accuracy: 664.0/1032(64%)\n", + "Class 3 accuracy: 367.0/1010(36%)\n", + "Class 4 accuracy: 979.0/982(100%)\n", + "Class 5 accuracy: 864.0/892(97%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/11263 (0%)]\tLoss: 0.008444\n", + "Train Epoch: 2 [640/11263 (6%)]\tLoss: 0.020623\n", + "Train Epoch: 2 [1280/11263 (11%)]\tLoss: 0.028893\n", + "Train Epoch: 2 [1920/11263 (17%)]\tLoss: 0.025949\n", + "Train Epoch: 2 [2560/11263 (23%)]\tLoss: 0.027629\n", + "Train Epoch: 2 [3200/11263 (28%)]\tLoss: 0.012673\n", + "Train Epoch: 2 [3840/11263 (34%)]\tLoss: 0.132138\n", + "Train Epoch: 2 [4480/11263 (40%)]\tLoss: 0.019918\n", + "Train Epoch: 2 [5120/11263 (45%)]\tLoss: 0.040663\n", + "Train Epoch: 2 [5760/11263 (51%)]\tLoss: 0.072586\n", + "Train Epoch: 2 [6400/11263 (57%)]\tLoss: 0.027573\n", + "Train Epoch: 2 [7040/11263 (62%)]\tLoss: 0.010655\n", + "Train Epoch: 2 [7680/11263 (68%)]\tLoss: 0.007804\n", + "Train Epoch: 2 [8320/11263 (74%)]\tLoss: 0.021280\n", + "Train Epoch: 2 [8960/11263 (80%)]\tLoss: 0.038740\n", + "Train Epoch: 2 [9600/11263 (85%)]\tLoss: 0.005795\n", + "Train Epoch: 2 [10240/11263 (91%)]\tLoss: 0.005783\n", + "Train Epoch: 2 [10880/11263 (97%)]\tLoss: 0.049235\n", + "\n", + "Test set: Average loss: 5.5267\n", + "Class 0 accuracy: 647.0/980(66%)\n", + "Class 1 accuracy: 970.0/1135(85%)\n", + "Class 2 accuracy: 616.0/1032(60%)\n", + "Class 3 accuracy: 240.0/1010(24%)\n", + "Class 4 accuracy: 979.0/982(100%)\n", + "Class 5 accuracy: 876.0/892(98%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/11263 (0%)]\tLoss: 0.060683\n", + "Train Epoch: 3 [640/11263 (6%)]\tLoss: 0.049512\n", + "Train Epoch: 3 [1280/11263 (11%)]\tLoss: 0.034698\n", + "Train Epoch: 3 [1920/11263 (17%)]\tLoss: 0.015581\n", + "Train Epoch: 3 [2560/11263 (23%)]\tLoss: 0.097252\n", + "Train Epoch: 3 [3200/11263 (28%)]\tLoss: 0.022429\n", + "Train Epoch: 3 [3840/11263 (34%)]\tLoss: 0.021434\n", + "Train Epoch: 3 [4480/11263 (40%)]\tLoss: 0.030935\n", + "Train Epoch: 3 [5120/11263 (45%)]\tLoss: 0.055945\n", + "Train Epoch: 3 [5760/11263 (51%)]\tLoss: 0.032630\n", + "Train Epoch: 3 [6400/11263 (57%)]\tLoss: 0.010632\n", + "Train Epoch: 3 [7040/11263 (62%)]\tLoss: 0.014181\n", + "Train Epoch: 3 [7680/11263 (68%)]\tLoss: 0.011640\n", + "Train Epoch: 3 [8320/11263 (74%)]\tLoss: 0.022853\n", + "Train Epoch: 3 [8960/11263 (80%)]\tLoss: 0.011952\n", + "Train Epoch: 3 [9600/11263 (85%)]\tLoss: 0.029158\n", + "Train Epoch: 3 [10240/11263 (91%)]\tLoss: 0.005775\n", + "Train Epoch: 3 [10880/11263 (97%)]\tLoss: 0.044570\n", + "\n", + "Test set: Average loss: 6.0346\n", + "Class 0 accuracy: 662.0/980(68%)\n", + "Class 1 accuracy: 972.0/1135(86%)\n", + "Class 2 accuracy: 558.0/1032(54%)\n", + "Class 3 accuracy: 228.0/1010(23%)\n", + "Class 4 accuracy: 978.0/982(100%)\n", + "Class 5 accuracy: 883.0/892(99%)\n", + "Class 6 accuracy: 0.0/958(0%)\n", + "Class 7 accuracy: 0.0/1028(0%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/12183 (0%)]\tLoss: 1.379911\n", + "Train Epoch: 1 [640/12183 (5%)]\tLoss: 0.125989\n", + "Train Epoch: 1 [1280/12183 (10%)]\tLoss: 0.938824\n", + "Train Epoch: 1 [1920/12183 (16%)]\tLoss: 0.376103\n", + "Train Epoch: 1 [2560/12183 (21%)]\tLoss: 0.235958\n", + "Train Epoch: 1 [3200/12183 (26%)]\tLoss: 0.146971\n", + "Train Epoch: 1 [3840/12183 (31%)]\tLoss: 0.261188\n", + "Train Epoch: 1 [4480/12183 (37%)]\tLoss: 0.162076\n", + "Train Epoch: 1 [5120/12183 (42%)]\tLoss: 0.064259\n", + "Train Epoch: 1 [5760/12183 (47%)]\tLoss: 0.127866\n", + "Train Epoch: 1 [6400/12183 (52%)]\tLoss: 0.153409\n", + "Train Epoch: 1 [7040/12183 (58%)]\tLoss: 0.117668\n", + "Train Epoch: 1 [7680/12183 (63%)]\tLoss: 0.058572\n", + "Train Epoch: 1 [8320/12183 (68%)]\tLoss: 0.084697\n", + "Train Epoch: 1 [8960/12183 (73%)]\tLoss: 0.034420\n", + "Train Epoch: 1 [9600/12183 (79%)]\tLoss: 0.017252\n", + "Train Epoch: 1 [10240/12183 (84%)]\tLoss: 0.020837\n", + "Train Epoch: 1 [10880/12183 (89%)]\tLoss: 0.022506\n", + "Train Epoch: 1 [11520/12183 (94%)]\tLoss: 0.073931\n", + "Train Epoch: 1 [4370/12183 (99%)]\tLoss: 0.032285\n", + "\n", + "Test set: Average loss: 2.6226\n", + "Class 0 accuracy: 668.0/980(68%)\n", + "Class 1 accuracy: 975.0/1135(86%)\n", + "Class 2 accuracy: 475.0/1032(46%)\n", + "Class 3 accuracy: 489.0/1010(48%)\n", + "Class 4 accuracy: 691.0/982(70%)\n", + "Class 5 accuracy: 564.0/892(63%)\n", + "Class 6 accuracy: 948.0/958(99%)\n", + "Class 7 accuracy: 1003.0/1028(98%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 2 [0/12183 (0%)]\tLoss: 0.045590\n", + "Train Epoch: 2 [640/12183 (5%)]\tLoss: 0.091010\n", + "Train Epoch: 2 [1280/12183 (10%)]\tLoss: 0.021004\n", + "Train Epoch: 2 [1920/12183 (16%)]\tLoss: 0.036341\n", + "Train Epoch: 2 [2560/12183 (21%)]\tLoss: 0.021020\n", + "Train Epoch: 2 [3200/12183 (26%)]\tLoss: 0.036480\n", + "Train Epoch: 2 [3840/12183 (31%)]\tLoss: 0.043549\n", + "Train Epoch: 2 [4480/12183 (37%)]\tLoss: 0.029598\n", + "Train Epoch: 2 [5120/12183 (42%)]\tLoss: 0.053440\n", + "Train Epoch: 2 [5760/12183 (47%)]\tLoss: 0.016025\n", + "Train Epoch: 2 [6400/12183 (52%)]\tLoss: 0.022595\n", + "Train Epoch: 2 [7040/12183 (58%)]\tLoss: 0.008219\n", + "Train Epoch: 2 [7680/12183 (63%)]\tLoss: 0.047070\n", + "Train Epoch: 2 [8320/12183 (68%)]\tLoss: 0.021060\n", + "Train Epoch: 2 [8960/12183 (73%)]\tLoss: 0.024627\n", + "Train Epoch: 2 [9600/12183 (79%)]\tLoss: 0.031155\n", + "Train Epoch: 2 [10240/12183 (84%)]\tLoss: 0.045095\n", + "Train Epoch: 2 [10880/12183 (89%)]\tLoss: 0.015965\n", + "Train Epoch: 2 [11520/12183 (94%)]\tLoss: 0.025968\n", + "Train Epoch: 2 [4370/12183 (99%)]\tLoss: 0.043935\n", + "\n", + "Test set: Average loss: 3.1688\n", + "Class 0 accuracy: 682.0/980(70%)\n", + "Class 1 accuracy: 969.0/1135(85%)\n", + "Class 2 accuracy: 480.0/1032(47%)\n", + "Class 3 accuracy: 471.0/1010(47%)\n", + "Class 4 accuracy: 635.0/982(65%)\n", + "Class 5 accuracy: 484.0/892(54%)\n", + "Class 6 accuracy: 950.0/958(99%)\n", + "Class 7 accuracy: 1013.0/1028(99%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 3 [0/12183 (0%)]\tLoss: 0.019614\n", + "Train Epoch: 3 [640/12183 (5%)]\tLoss: 0.059921\n", + "Train Epoch: 3 [1280/12183 (10%)]\tLoss: 0.018621\n", + "Train Epoch: 3 [1920/12183 (16%)]\tLoss: 0.011714\n", + "Train Epoch: 3 [2560/12183 (21%)]\tLoss: 0.014679\n", + "Train Epoch: 3 [3200/12183 (26%)]\tLoss: 0.012920\n", + "Train Epoch: 3 [3840/12183 (31%)]\tLoss: 0.022788\n", + "Train Epoch: 3 [4480/12183 (37%)]\tLoss: 0.016748\n", + "Train Epoch: 3 [5120/12183 (42%)]\tLoss: 0.028296\n", + "Train Epoch: 3 [5760/12183 (47%)]\tLoss: 0.021148\n", + "Train Epoch: 3 [6400/12183 (52%)]\tLoss: 0.008148\n", + "Train Epoch: 3 [7040/12183 (58%)]\tLoss: 0.011808\n", + "Train Epoch: 3 [7680/12183 (63%)]\tLoss: 0.009274\n", + "Train Epoch: 3 [8320/12183 (68%)]\tLoss: 0.011613\n", + "Train Epoch: 3 [8960/12183 (73%)]\tLoss: 0.013502\n", + "Train Epoch: 3 [9600/12183 (79%)]\tLoss: 0.022795\n", + "Train Epoch: 3 [10240/12183 (84%)]\tLoss: 0.013261\n", + "Train Epoch: 3 [10880/12183 (89%)]\tLoss: 0.026117\n", + "Train Epoch: 3 [11520/12183 (94%)]\tLoss: 0.004542\n", + "Train Epoch: 3 [4370/12183 (99%)]\tLoss: 0.002898\n", + "\n", + "Test set: Average loss: 3.5287\n", + "Class 0 accuracy: 636.0/980(65%)\n", + "Class 1 accuracy: 955.0/1135(84%)\n", + "Class 2 accuracy: 451.0/1032(44%)\n", + "Class 3 accuracy: 432.0/1010(43%)\n", + "Class 4 accuracy: 562.0/982(57%)\n", + "Class 5 accuracy: 458.0/892(51%)\n", + "Class 6 accuracy: 952.0/958(99%)\n", + "Class 7 accuracy: 1018.0/1028(99%)\n", + "Class 8 accuracy: 0.0/974(0%)\n", + "Class 9 accuracy: 0.0/1009(0%)\n", + "Train Epoch: 1 [0/11800 (0%)]\tLoss: 0.473740\n", + "Train Epoch: 1 [640/11800 (5%)]\tLoss: 0.210103\n", + "Train Epoch: 1 [1280/11800 (11%)]\tLoss: 0.418402\n", + "Train Epoch: 1 [1920/11800 (16%)]\tLoss: 0.530582\n", + "Train Epoch: 1 [2560/11800 (22%)]\tLoss: 0.304206\n", + "Train Epoch: 1 [3200/11800 (27%)]\tLoss: 0.122092\n", + "Train Epoch: 1 [3840/11800 (32%)]\tLoss: 0.183575\n", + "Train Epoch: 1 [4480/11800 (38%)]\tLoss: 0.260152\n", + "Train Epoch: 1 [5120/11800 (43%)]\tLoss: 0.277376\n", + "Train Epoch: 1 [5760/11800 (49%)]\tLoss: 0.212683\n", + "Train Epoch: 1 [6400/11800 (54%)]\tLoss: 0.163834\n", + "Train Epoch: 1 [7040/11800 (59%)]\tLoss: 0.088070\n", + "Train Epoch: 1 [7680/11800 (65%)]\tLoss: 0.092493\n", + "Train Epoch: 1 [8320/11800 (70%)]\tLoss: 0.169504\n", + "Train Epoch: 1 [8960/11800 (76%)]\tLoss: 0.130592\n", + "Train Epoch: 1 [9600/11800 (81%)]\tLoss: 0.043165\n", + "Train Epoch: 1 [10240/11800 (86%)]\tLoss: 0.051642\n", + "Train Epoch: 1 [10880/11800 (92%)]\tLoss: 0.081378\n", + "Train Epoch: 1 [11520/11800 (97%)]\tLoss: 0.073074\n", + "\n", + "Test set: Average loss: 1.1909\n", + "Class 0 accuracy: 710.0/980(72%)\n", + "Class 1 accuracy: 937.0/1135(83%)\n", + "Class 2 accuracy: 525.0/1032(51%)\n", + "Class 3 accuracy: 409.0/1010(40%)\n", + "Class 4 accuracy: 368.0/982(37%)\n", + "Class 5 accuracy: 359.0/892(40%)\n", + "Class 6 accuracy: 782.0/958(82%)\n", + "Class 7 accuracy: 587.0/1028(57%)\n", + "Class 8 accuracy: 945.0/974(97%)\n", + "Class 9 accuracy: 974.0/1009(97%)\n", + "Train Epoch: 2 [0/11800 (0%)]\tLoss: 0.106367\n", + "Train Epoch: 2 [640/11800 (5%)]\tLoss: 0.110765\n", + "Train Epoch: 2 [1280/11800 (11%)]\tLoss: 0.168906\n", + "Train Epoch: 2 [1920/11800 (16%)]\tLoss: 0.130259\n", + "Train Epoch: 2 [2560/11800 (22%)]\tLoss: 0.099700\n", + "Train Epoch: 2 [3200/11800 (27%)]\tLoss: 0.045566\n", + "Train Epoch: 2 [3840/11800 (32%)]\tLoss: 0.032498\n", + "Train Epoch: 2 [4480/11800 (38%)]\tLoss: 0.127420\n", + "Train Epoch: 2 [5120/11800 (43%)]\tLoss: 0.127244\n", + "Train Epoch: 2 [5760/11800 (49%)]\tLoss: 0.123305\n", + "Train Epoch: 2 [6400/11800 (54%)]\tLoss: 0.033301\n", + "Train Epoch: 2 [7040/11800 (59%)]\tLoss: 0.050663\n", + "Train Epoch: 2 [7680/11800 (65%)]\tLoss: 0.029956\n", + "Train Epoch: 2 [8320/11800 (70%)]\tLoss: 0.016801\n", + "Train Epoch: 2 [8960/11800 (76%)]\tLoss: 0.067689\n", + "Train Epoch: 2 [9600/11800 (81%)]\tLoss: 0.044518\n", + "Train Epoch: 2 [10240/11800 (86%)]\tLoss: 0.073524\n", + "Train Epoch: 2 [10880/11800 (92%)]\tLoss: 0.035689\n", + "Train Epoch: 2 [11520/11800 (97%)]\tLoss: 0.084134\n", + "\n", + "Test set: Average loss: 1.5479\n", + "Class 0 accuracy: 684.0/980(70%)\n", + "Class 1 accuracy: 893.0/1135(79%)\n", + "Class 2 accuracy: 470.0/1032(46%)\n", + "Class 3 accuracy: 346.0/1010(34%)\n", + "Class 4 accuracy: 312.0/982(32%)\n", + "Class 5 accuracy: 298.0/892(33%)\n", + "Class 6 accuracy: 758.0/958(79%)\n", + "Class 7 accuracy: 583.0/1028(57%)\n", + "Class 8 accuracy: 953.0/974(98%)\n", + "Class 9 accuracy: 977.0/1009(97%)\n", + "Train Epoch: 3 [0/11800 (0%)]\tLoss: 0.106828\n", + "Train Epoch: 3 [640/11800 (5%)]\tLoss: 0.064151\n", + "Train Epoch: 3 [1280/11800 (11%)]\tLoss: 0.064141\n", + "Train Epoch: 3 [1920/11800 (16%)]\tLoss: 0.046738\n", + "Train Epoch: 3 [2560/11800 (22%)]\tLoss: 0.060965\n", + "Train Epoch: 3 [3200/11800 (27%)]\tLoss: 0.041177\n", + "Train Epoch: 3 [3840/11800 (32%)]\tLoss: 0.015125\n", + "Train Epoch: 3 [4480/11800 (38%)]\tLoss: 0.036628\n", + "Train Epoch: 3 [5120/11800 (43%)]\tLoss: 0.040213\n", + "Train Epoch: 3 [5760/11800 (49%)]\tLoss: 0.038948\n", + "Train Epoch: 3 [6400/11800 (54%)]\tLoss: 0.065069\n", + "Train Epoch: 3 [7040/11800 (59%)]\tLoss: 0.060684\n", + "Train Epoch: 3 [7680/11800 (65%)]\tLoss: 0.051811\n", + "Train Epoch: 3 [8320/11800 (70%)]\tLoss: 0.096974\n", + "Train Epoch: 3 [8960/11800 (76%)]\tLoss: 0.014142\n", + "Train Epoch: 3 [9600/11800 (81%)]\tLoss: 0.068916\n", + "Train Epoch: 3 [10240/11800 (86%)]\tLoss: 0.047880\n", + "Train Epoch: 3 [10880/11800 (92%)]\tLoss: 0.007572\n", + "Train Epoch: 3 [11520/11800 (97%)]\tLoss: 0.025779\n", + "\n", + "Test set: Average loss: 1.6151\n", + "Class 0 accuracy: 647.0/980(66%)\n", + "Class 1 accuracy: 885.0/1135(78%)\n", + "Class 2 accuracy: 492.0/1032(48%)\n", + "Class 3 accuracy: 379.0/1010(38%)\n", + "Class 4 accuracy: 323.0/982(33%)\n", + "Class 5 accuracy: 310.0/892(35%)\n", + "Class 6 accuracy: 736.0/958(77%)\n", + "Class 7 accuracy: 546.0/1028(53%)\n", + "Class 8 accuracy: 961.0/974(99%)\n", + "Class 9 accuracy: 976.0/1009(97%)\n", + "Train Epoch: 1 [0/12665 (0%)]\tLoss: 0.030852\n", + "Train Epoch: 1 [640/12665 (5%)]\tLoss: 0.051628\n", + "Train Epoch: 1 [1280/12665 (10%)]\tLoss: 0.097404\n", + "Train Epoch: 1 [1920/12665 (15%)]\tLoss: 0.066156\n", + "Train Epoch: 1 [2560/12665 (20%)]\tLoss: 0.085003\n", + "Train Epoch: 1 [3200/12665 (25%)]\tLoss: 0.022351\n", + "Train Epoch: 1 [3840/12665 (30%)]\tLoss: 0.047033\n", + "Train Epoch: 1 [4480/12665 (35%)]\tLoss: 0.021085\n", + "Train Epoch: 1 [5120/12665 (40%)]\tLoss: 0.038875\n", + "Train Epoch: 1 [5760/12665 (45%)]\tLoss: 0.035716\n", + "Train Epoch: 1 [6400/12665 (51%)]\tLoss: 0.033066\n", + "Train Epoch: 1 [7040/12665 (56%)]\tLoss: 0.020775\n", + "Train Epoch: 1 [7680/12665 (61%)]\tLoss: 0.027079\n", + "Train Epoch: 1 [8320/12665 (66%)]\tLoss: 0.071041\n", + "Train Epoch: 1 [8960/12665 (71%)]\tLoss: 0.030695\n", + "Train Epoch: 1 [9600/12665 (76%)]\tLoss: 0.038757\n", + "Train Epoch: 1 [10240/12665 (81%)]\tLoss: 0.003501\n", + "Train Epoch: 1 [10880/12665 (86%)]\tLoss: 0.011310\n", + "Train Epoch: 1 [11520/12665 (91%)]\tLoss: 0.057821\n", + "Train Epoch: 1 [12160/12665 (96%)]\tLoss: 0.016945\n", + "\n", + "Test set: Average loss: 1.3637\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1133.0/1135(100%)\n", + "Class 2 accuracy: 574.0/1032(56%)\n", + "Class 3 accuracy: 561.0/1010(56%)\n", + "Class 4 accuracy: 494.0/982(50%)\n", + "Class 5 accuracy: 328.0/892(37%)\n", + "Class 6 accuracy: 656.0/958(68%)\n", + "Class 7 accuracy: 753.0/1028(73%)\n", + "Class 8 accuracy: 701.0/974(72%)\n", + "Class 9 accuracy: 866.0/1009(86%)\n", + "Train Epoch: 2 [0/12665 (0%)]\tLoss: 0.016473\n", + "Train Epoch: 2 [640/12665 (5%)]\tLoss: 0.007508\n", + "Train Epoch: 2 [1280/12665 (10%)]\tLoss: 0.037633\n", + "Train Epoch: 2 [1920/12665 (15%)]\tLoss: 0.026398\n", + "Train Epoch: 2 [2560/12665 (20%)]\tLoss: 0.004491\n", + "Train Epoch: 2 [3200/12665 (25%)]\tLoss: 0.002447\n", + "Train Epoch: 2 [3840/12665 (30%)]\tLoss: 0.007396\n", + "Train Epoch: 2 [4480/12665 (35%)]\tLoss: 0.022243\n", + "Train Epoch: 2 [5120/12665 (40%)]\tLoss: 0.032471\n", + "Train Epoch: 2 [5760/12665 (45%)]\tLoss: 0.012960\n", + "Train Epoch: 2 [6400/12665 (51%)]\tLoss: 0.009143\n", + "Train Epoch: 2 [7040/12665 (56%)]\tLoss: 0.005618\n", + "Train Epoch: 2 [7680/12665 (61%)]\tLoss: 0.016858\n", + "Train Epoch: 2 [8320/12665 (66%)]\tLoss: 0.015019\n", + "Train Epoch: 2 [8960/12665 (71%)]\tLoss: 0.042326\n", + "Train Epoch: 2 [9600/12665 (76%)]\tLoss: 0.005700\n", + "Train Epoch: 2 [10240/12665 (81%)]\tLoss: 0.020611\n", + "Train Epoch: 2 [10880/12665 (86%)]\tLoss: 0.011131\n", + "Train Epoch: 2 [11520/12665 (91%)]\tLoss: 0.019555\n", + "Train Epoch: 2 [12160/12665 (96%)]\tLoss: 0.015460\n", + "\n", + "Test set: Average loss: 1.5375\n", + "Class 0 accuracy: 977.0/980(100%)\n", + "Class 1 accuracy: 1133.0/1135(100%)\n", + "Class 2 accuracy: 500.0/1032(48%)\n", + "Class 3 accuracy: 503.0/1010(50%)\n", + "Class 4 accuracy: 489.0/982(50%)\n", + "Class 5 accuracy: 362.0/892(41%)\n", + "Class 6 accuracy: 639.0/958(67%)\n", + "Class 7 accuracy: 746.0/1028(73%)\n", + "Class 8 accuracy: 657.0/974(67%)\n", + "Class 9 accuracy: 847.0/1009(84%)\n", + "Train Epoch: 3 [0/12665 (0%)]\tLoss: 0.003884\n", + "Train Epoch: 3 [640/12665 (5%)]\tLoss: 0.024282\n", + "Train Epoch: 3 [1280/12665 (10%)]\tLoss: 0.007995\n", + "Train Epoch: 3 [1920/12665 (15%)]\tLoss: 0.006038\n", + "Train Epoch: 3 [2560/12665 (20%)]\tLoss: 0.007882\n", + "Train Epoch: 3 [3200/12665 (25%)]\tLoss: 0.008968\n", + "Train Epoch: 3 [3840/12665 (30%)]\tLoss: 0.007985\n", + "Train Epoch: 3 [4480/12665 (35%)]\tLoss: 0.017382\n", + "Train Epoch: 3 [5120/12665 (40%)]\tLoss: 0.006549\n", + "Train Epoch: 3 [5760/12665 (45%)]\tLoss: 0.006111\n", + "Train Epoch: 3 [6400/12665 (51%)]\tLoss: 0.016712\n", + "Train Epoch: 3 [7040/12665 (56%)]\tLoss: 0.009508\n", + "Train Epoch: 3 [7680/12665 (61%)]\tLoss: 0.013591\n", + "Train Epoch: 3 [8320/12665 (66%)]\tLoss: 0.002323\n", + "Train Epoch: 3 [8960/12665 (71%)]\tLoss: 0.003972\n", + "Train Epoch: 3 [9600/12665 (76%)]\tLoss: 0.002240\n", + "Train Epoch: 3 [10240/12665 (81%)]\tLoss: 0.012233\n", + "Train Epoch: 3 [10880/12665 (86%)]\tLoss: 0.046749\n", + "Train Epoch: 3 [11520/12665 (91%)]\tLoss: 0.006683\n", + "Train Epoch: 3 [12160/12665 (96%)]\tLoss: 0.006137\n", + "\n", + "Test set: Average loss: 1.5670\n", + "Class 0 accuracy: 976.0/980(100%)\n", + "Class 1 accuracy: 1134.0/1135(100%)\n", + "Class 2 accuracy: 509.0/1032(49%)\n", + "Class 3 accuracy: 520.0/1010(51%)\n", + "Class 4 accuracy: 496.0/982(51%)\n", + "Class 5 accuracy: 355.0/892(40%)\n", + "Class 6 accuracy: 625.0/958(65%)\n", + "Class 7 accuracy: 743.0/1028(72%)\n", + "Class 8 accuracy: 654.0/974(67%)\n", + "Class 9 accuracy: 854.0/1009(85%)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{0: 0.9959183673469387,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.9959183673469387,\n", + " 1: 1.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.996938775510204,\n", + " 1: 1.0,\n", + " 2: 0.0,\n", + " 3: 0.0,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '0_1'},\n", + " {0: 0.8459183673469388,\n", + " 1: 0.9215859030837005,\n", + " 2: 0.9602713178294574,\n", + " 3: 0.9732673267326732,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.7795918367346939,\n", + " 1: 0.8801762114537445,\n", + " 2: 0.9689922480620154,\n", + " 3: 0.9782178217821782,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.7377551020408163,\n", + " 1: 0.852863436123348,\n", + " 2: 0.9680232558139535,\n", + " 3: 0.9821782178217822,\n", + " 4: 0.0,\n", + " 5: 0.0,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '2_3'},\n", + " {0: 0.7755102040816326,\n", + " 1: 0.8687224669603524,\n", + " 2: 0.6434108527131783,\n", + " 3: 0.36336633663366336,\n", + " 4: 0.9969450101832994,\n", + " 5: 0.968609865470852,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.6602040816326531,\n", + " 1: 0.8546255506607929,\n", + " 2: 0.5968992248062015,\n", + " 3: 0.2376237623762376,\n", + " 4: 0.9969450101832994,\n", + " 5: 0.9820627802690582,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.6755102040816326,\n", + " 1: 0.8563876651982378,\n", + " 2: 0.5406976744186046,\n", + " 3: 0.22574257425742575,\n", + " 4: 0.9959266802443992,\n", + " 5: 0.9899103139013453,\n", + " 6: 0.0,\n", + " 7: 0.0,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '4_5'},\n", + " {0: 0.6816326530612244,\n", + " 1: 0.8590308370044053,\n", + " 2: 0.46027131782945735,\n", + " 3: 0.48415841584158414,\n", + " 4: 0.7036659877800407,\n", + " 5: 0.6322869955156951,\n", + " 6: 0.9895615866388309,\n", + " 7: 0.97568093385214,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.6959183673469388,\n", + " 1: 0.8537444933920705,\n", + " 2: 0.46511627906976744,\n", + " 3: 0.46633663366336636,\n", + " 4: 0.6466395112016293,\n", + " 5: 0.5426008968609866,\n", + " 6: 0.9916492693110647,\n", + " 7: 0.9854085603112841,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.6489795918367347,\n", + " 1: 0.8414096916299559,\n", + " 2: 0.437015503875969,\n", + " 3: 0.4277227722772277,\n", + " 4: 0.5723014256619144,\n", + " 5: 0.5134529147982063,\n", + " 6: 0.9937369519832986,\n", + " 7: 0.9902723735408561,\n", + " 8: 0.0,\n", + " 9: 0.0,\n", + " 'phase': '6_7'},\n", + " {0: 0.7244897959183674,\n", + " 1: 0.8255506607929516,\n", + " 2: 0.5087209302325582,\n", + " 3: 0.404950495049505,\n", + " 4: 0.37474541751527496,\n", + " 5: 0.4024663677130045,\n", + " 6: 0.8162839248434238,\n", + " 7: 0.5710116731517509,\n", + " 8: 0.9702258726899384,\n", + " 9: 0.9653121902874133,\n", + " 'phase': '8_9'},\n", + " {0: 0.6979591836734694,\n", + " 1: 0.786784140969163,\n", + " 2: 0.45542635658914726,\n", + " 3: 0.3425742574257426,\n", + " 4: 0.31771894093686354,\n", + " 5: 0.33408071748878926,\n", + " 6: 0.791231732776618,\n", + " 7: 0.5671206225680934,\n", + " 8: 0.9784394250513347,\n", + " 9: 0.9682854311199207,\n", + " 'phase': '8_9'},\n", + " {0: 0.6602040816326531,\n", + " 1: 0.7797356828193832,\n", + " 2: 0.47674418604651164,\n", + " 3: 0.37524752475247525,\n", + " 4: 0.3289205702647658,\n", + " 5: 0.3475336322869955,\n", + " 6: 0.7682672233820459,\n", + " 7: 0.5311284046692607,\n", + " 8: 0.9866529774127311,\n", + " 9: 0.9672943508424182,\n", + " 'phase': '8_9'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9982378854625551,\n", + " 2: 0.5562015503875969,\n", + " 3: 0.5554455445544555,\n", + " 4: 0.5030549898167006,\n", + " 5: 0.36771300448430494,\n", + " 6: 0.6847599164926931,\n", + " 7: 0.7324902723735408,\n", + " 8: 0.7197125256673511,\n", + " 9: 0.8582755203171457,\n", + " 'phase': '0_1_again'},\n", + " {0: 0.996938775510204,\n", + " 1: 0.9982378854625551,\n", + " 2: 0.4844961240310077,\n", + " 3: 0.498019801980198,\n", + " 4: 0.4979633401221996,\n", + " 5: 0.40582959641255606,\n", + " 6: 0.6670146137787056,\n", + " 7: 0.72568093385214,\n", + " 8: 0.6745379876796714,\n", + " 9: 0.8394449950445986,\n", + " 'phase': '0_1_again'},\n", + " {0: 0.9959183673469387,\n", + " 1: 0.9991189427312775,\n", + " 2: 0.4932170542635659,\n", + " 3: 0.5148514851485149,\n", + " 4: 0.505091649694501,\n", + " 5: 0.39798206278026904,\n", + " 6: 0.6524008350730689,\n", + " 7: 0.7227626459143969,\n", + " 8: 0.6714579055441479,\n", + " 9: 0.846382556987116,\n", + " 'phase': '0_1_again'}]" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8Yad6wstNUpx" + }, + "source": [ + "# Analysis of the results" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "gimHfUXdW4_K", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 459 + }, + "outputId": "3a07ff95-27df-468d-f571-414c99f1ca1e" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " epoch 0 1 2 3 4 5 6 7 8 9 phase\n", + "0 0 0.96 0.97 0.82 0.85 0.59 0.35 0.86 0.85 0.52 0.82 baseline" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
epoch0123456789phase
000.960.970.820.850.590.350.860.850.520.82baseline
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " epoch 0 1 2 3 4 5 6 7 8 9 phase\n", + "0 0 1.0 1.0 0.00 0.0 0.00 0.00 0.0 0.00 0.0 0.00 0_1\n", + "1 1 0.0 0.0 0.14 1.0 0.00 0.00 0.0 0.00 0.0 0.00 2_3\n", + "2 2 0.0 0.0 0.00 0.0 0.99 0.89 0.0 0.00 0.0 0.00 4_5\n", + "3 3 0.0 0.0 0.00 0.0 0.00 0.00 1.0 0.93 0.0 0.00 6_7\n", + "4 4 0.0 0.0 0.00 0.0 0.00 0.00 0.0 0.00 1.0 0.52 8_9" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
epoch0123456789phase
001.01.00.000.00.000.000.00.000.00.000_1
110.00.00.141.00.000.000.00.000.00.002_3
220.00.00.000.00.990.890.00.000.00.004_5
330.00.00.000.00.000.001.00.930.00.006_7
440.00.00.000.00.000.000.00.001.00.528_9
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " epoch 0 1 2 3 4 5 6 7 8 9 phase\n", + "0 0 1.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0_1\n", + "1 1 0.04 0.51 0.23 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2_3\n", + "2 2 0.71 0.64 0.06 0.00 0.98 0.85 0.00 0.00 0.00 0.00 4_5\n", + "3 3 0.23 0.53 0.00 0.01 0.00 0.00 0.99 0.96 0.00 0.00 6_7\n", + "4 4 0.44 0.55 0.00 0.00 0.00 0.00 0.19 0.00 0.98 0.88 8_9" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
epoch0123456789phase
001.000.990.000.000.000.000.000.000.000.000_1
110.040.510.231.000.000.000.000.000.000.002_3
220.710.640.060.000.980.850.000.000.000.004_5
330.230.530.000.010.000.000.990.960.000.006_7
440.440.550.000.000.000.000.190.000.980.888_9
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {} + } + ], + "source": [ + "# The following helper code takes the logs and converts them into a dataframe\n", + "# for easier reading. You can also store the result as a CSV or HDF file by\n", + "# using the .to_csv and .to_hdf methods from pandas for later reading.\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "def format_results(history):\n", + " logs = pd.DataFrame(history).round(2)\n", + " logs.index.name = 'epoch'\n", + " logs = logs.reset_index(drop = False)\n", + " return logs\n", + "\n", + "#display(format_results(history_regular_mnist).head())\n", + "display(format_results(history_catastrophic_forgetting).head())\n", + "display(format_results(history_memory_replay).head())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "id": "jR6eRKn4WguU", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 807 + }, + "outputId": "a20c835b-1f62-4b6c-cd45-745f122a0041" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "# Finally, we plot the results and optionally compare the three different training setups.\n", + "# Try to adapt and extend the plotting function to the needs of your experimental setup.\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "fig, axes = plt.subplots(10, 2, figsize = (6, 8), sharex = True)\n", + "\n", + "# Iterate over the different training setups for comparison\n", + "for log_id, logs in enumerate([history_catastrophic_forgetting, history_memory_replay]):\n", + " # Format the logs into a dataframe\n", + " logs = format_results(logs)\n", + "\n", + " # Iterate through the 10 different MNIST classes (0...9). We will plot one subpanel\n", + " # for each of them, showing the accuracies for that particular class over the course\n", + " # of the entire training.\n", + " for class_ in range(10):\n", + " # Get the correct subpanel of the plot\n", + " ax = axes[class_, log_id]\n", + " \n", + " # Draw a line plot: The x axis will be the epoch, the y axis will be the accuarcy\n", + " # for predicting a particular class.\n", + " ax.plot(logs.epoch, logs[class_], color = 'black')\n", + " \n", + " # Finally, we will optimize the plot a bit and remove unneeded lines\n", + " ax.set_ylim([0, 1])\n", + " ax.set_ylabel(f\"Acc '{class_}'\")\n", + " sns.despine(bottom = True, trim = True)\n", + "\n", + " ax.set_xlabel(\"Epochs\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file