diff --git a/01_materials/labs/lab_2.ipynb b/01_materials/labs/lab_2.ipynb index c4cc9223..ef6332bf 100644 --- a/01_materials/labs/lab_2.ipynb +++ b/01_materials/labs/lab_2.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -36,9 +36,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "sample_index = 45\n", "plt.figure(figsize=(3, 3))\n", @@ -58,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -91,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -101,18 +112,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "one_hot(n_classes=10, y=3)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "one_hot(n_classes=10, y=[0, 4, 9, 1])" ] @@ -143,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -164,9 +200,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n" + ] + } + ], "source": [ "print(softmax([10, 2, -3]))" ] @@ -181,9 +225,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n", + " [2.47262316e-03 9.97527377e-01 1.38536042e-11]]\n" + ] + } + ], "source": [ "X = np.array([[10, 2, -3],\n", " [-1, 5, -20]])\n", @@ -199,18 +252,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n" + ] + } + ], "source": [ "print(np.sum(softmax([10, 2, -3])))" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "softmax of 2 vectors:\n", + "[[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n", + " [2.47262316e-03 9.97527377e-01 1.38536042e-11]]\n" + ] + } + ], "source": [ "print(\"softmax of 2 vectors:\")\n", "X = np.array([[10, 2, -3],\n", @@ -227,9 +298,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 1.]\n" + ] + } + ], "source": [ "print(np.sum(softmax(X), axis=1))" ] @@ -251,9 +330,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.01005033585350145\n" + ] + } + ], "source": [ "def nll(Y_true, Y_pred):\n", " Y_true = np.asarray(Y_true)\n", @@ -279,9 +366,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.605170185988091\n" + ] + } + ], "source": [ "print(nll([1, 0, 0], [0.01, 0.01, .98]))" ] @@ -295,9 +390,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.010050335853503449\n" + ] + } + ], "source": [ "# Check that the average NLL of the following 3 almost perfect\n", "# predictions is close to 0\n", @@ -324,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -345,10 +448,10 @@ " \n", " def forward(self, X):\n", " # Compute the linear combination of the input and weights\n", - " Z = None # TODO\n", + " Z = np.dot(X, self.W) + self.b\n", " \n", " # Return the softmax of the linear combination\n", - " return None # TODO\n", + " return softmax(Z)\n", " \n", " def predict(self, X):\n", " # Return the most probable class for each sample in X\n", @@ -360,7 +463,7 @@ " def loss(self, X, y):\n", " # Compute the negative log likelihood over the data provided\n", " y_onehot = one_hot(self.output_size, y)\n", - " return None # TODO\n", + " return nll(one_hot(self.output_size, y), self.forward(X))\n", "\n", " def grad_loss(self, X, y_true, y_pred):\n", " # Compute the gradient of the loss with respect to W and b for a single sample (X, y_true)\n", @@ -377,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -400,11 +503,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQn0lEQVR4nO3deVhUdf//8dfIMiwq7oCGiuaaa9ICaqKmhcs3Wy3LHctckbvFpdyy0BZvKrcslSwzvy2alUuUS5ZaalKm3qa3C6ggaQluocD5/dGP+ToyIIOHGbDn47rOdXk+8znn857Fc3jNWcZiGIYhAAAAALhG5dxdAAAAAIDrA+ECAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhAsAAAAApiBcAAAAADAF4aIUs1gsRZo2bNjg1jojIyMVGRnp1hpK2uTJk2WxWIq17IABA1S+fHlT6xkwYIDq1q1brGUzMzP14osvKjIyUkFBQSpfvryaN2+uGTNm6K+//jK1TuB6tXXrVj344IMKDg6Wt7e3goKC9MADD2jLli3XtN6XXnpJK1asMKfIqzh+/LgmT56spKQkl4znjMOHD8tisejVV181bZ0bNmyQxWLRxx9/fNW+jrb5jvZ1FotFkydPts3v2bNHkydP1uHDh/Ot81q229eqc+fOGjp0qFvGLsyVr19CQoIsFovD168wq1atslvP5erWrasBAwYUu8aS9txzz8lisahZs2Z27ZcuXVL9+vUVHx/vnsKuAeGiFNuyZYvd1K1bN/n6+uZrv/nmm91a55w5czRnzhy31oCiS05OVnx8vG6++WbNnz9fK1eu1AMPPKDJkyerR48eMgzD3SUCpdqbb76ptm3b6ujRo3r55Zf19ddf69VXX9WxY8fUrl07zZo1q9jrdnW4mDJlSqkMF+4WHR1dpKC4ZcsWRUdH2+b37NmjKVOmOPzj+Pnnn9fy5cvNLLNIPvvsM33//fd6/vnnXT62s7p3764tW7YoODjYqeVWrVqlKVOmOHxs+fLlpfa5JyUl6dVXX1VgYGC+x7y8vDRx4kRNnTpVp06dckN1xefp7gJQsNtvv91uvnr16ipXrly+9iudP39efn5+JVmanaZNm7psLFy70NBQHT58WP7+/ra2Tp06yd/fX08//bS+//57tWvXzo0VAqXX999/r5iYGHXr1k3Lly+Xp+f/7UYffvhh3XvvvRo9erRat26ttm3burHS0sfV+6ZrccMNN+iGG264ar+r7Y8vV79+/Wspqdheeukl3XvvvapVq5Zp6yyp97J69eqqXr26qets3bq1qeszS3Z2tgYOHKgnnnhCP//8s06ePJmvzyOPPKLY2Fi99dZbGj9+vBuqLB6OXJRxkZGRatasmb799ltFRETIz89PgwYNkpT/cGMeR4cI09LS9MQTT+iGG26Qt7e3QkNDNWXKFGVnZxephssPFecdzn7llVc0Y8YM1a1bV76+voqMjNRvv/2mS5cuaezYsapZs6YCAgJ07733Kj093W6dy5YtU9euXRUcHCxfX181adJEY8eO1blz5/KN//bbb6thw4ayWq1q2rSpPvjgA4eHny9evKhp06apcePGslqtql69ugYOHKjff//9qs/REWdqlKTdu3erc+fO8vf3V/Xq1TVixAidP3/ero9hGJozZ45atWolX19fVa5cWQ888IAOHjxYrBod8ff3twsWeW699VZJUkpKimljAdebuLg4WSwWzZ071y5YSJKnp6fmzJkji8Wi6dOn29oLOh3mylNvLBaLzp07p3fffdd22mvetjXvdJHExEQNHDhQVapUkb+/v3r27Jlv+1DQaSCXb6s3bNigW265RZI0cOBA23gFnVribA2F7ZuSk5P12GOPqUaNGrJarWrSpIlee+015ebm5hszNzdXL774omrXri0fHx+FhYXpm2++setz4MABDRw4UA0aNJCfn59q1aqlnj17ateuXQ6fx19//aXY2FgFBQXJ19dXHTp00M6dO+36FPVU2Mtfs4SEBD344IOSpI4dO9pe04SEBEmOPwdF3ebv3LlTPXr0sL1mNWvWVPfu3XX06NFC69u5c6d+/PFH9e3b167drPcyMzNTTz31lEJDQ+Xt7a1atWopJiYm334wMzNTQ4YMUdWqVVW+fHndfffd+u233/LVW9BpUWvWrFHnzp0VEBAgPz8/NWnSRHFxcbbXdfbs2ZLsTyfPW4ej/w9F+QxefmrezJkzFRoaqvLlyys8PFxbt24t9HUviunTp+uPP/7Qiy++WGAfb29v9e7dW/Pnzy9TZxUQLq4Dqampeuyxx9SnTx+tWrVKw4YNc2r5tLQ03XrrrVq7dq0mTpyo1atXa/DgwYqLi9OQIUOKXdfs2bP1/fffa/bs2XrnnXf0n//8Rz179tTgwYP1+++/a+HChbZTCi4/rCxJ+/fvV7du3bRgwQKtWbNGMTEx+t///V/17NnTrt/8+fP1+OOPq0WLFvr000/13HPPacqUKfmuQ8nNzdU999yj6dOnq0+fPvryyy81ffp0JSYmKjIyUhcuXHD6+RW1Runvcye7deumzp07a8WKFRoxYoTeeust9e7d267fE088oZiYGN15551asWKF5syZo927dysiIkInTpwotJ68nWFxr8FZt26dJOmmm24q1vLA9S4nJ0fr169XWFhYgd9qh4SEqE2bNlq3bp1ycnKcWv+WLVvk6+urbt262U57vfKU08GDB6tcuXL64IMPFB8frx9//FGRkZE6ffq0U2PdfPPNWrRokaS/z/nOG+/KbbEjRa3B0b7p999/V0REhL766iu98MILWrlype6880499dRTGjFiRL6xZs2apTVr1ig+Pl7vv/++ypUrp6ioKLtTlo4fP66qVatq+vTpWrNmjWbPni1PT0/ddttt2rdvX751jh8/XgcPHtQ777yjd955R8ePH1dkZOQ1f4nTvXt3vfTSS5L+3v/lvabdu3cvcJmibPPPnTunLl266MSJE5o9e7YSExMVHx+v2rVr68yZM4XW9MUXX8jDw0N33HGHw8ev5b08f/68OnTooHfffVejRo3S6tWr9eyzzyohIUH/8z//Y/tj2DAM9erVS++9957+9a9/afny5br99tsVFRVVpNd1wYIF6tatm3JzczVv3jx9/vnnGjVqlC1YPf/883rggQck2Z9OXtCpVc5+Bi9/zZcsWaJz586pW7duysjIsPXJCyJFvbZjz549mjZtmubOnXvVazIjIyN15MgR/frrr0Vad6lgoMzo37+/4e/vb9fWoUMHQ5LxzTff5OsvyZg0aVK+9jp16hj9+/e3zT/xxBNG+fLljSNHjtj1e/XVVw1Jxu7duwutq0OHDkaHDh1s84cOHTIkGS1btjRycnJs7fHx8YYk43/+53/slo+JiTEkGRkZGQ7Xn5uba1y6dMnYuHGjIcn4+eefDcMwjJycHCMoKMi47bbb7PofOXLE8PLyMurUqWNrW7p0qSHJ+OSTT+z6btu2zZBkzJkzp9DnOGnSJKOw/y4F1WgYf79vkozXX3/dbpkXX3zRkGR89913hmEYxpYtWwxJxmuvvWbXLyUlxfD19TWeeeYZu3Ve/vwMwzCmTJlieHh4GBs2bCj0uTjy888/G76+vsa9997r9LLAP0VaWpohyXj44YcL7de7d29DknHixAnDMBz/fzUMx9sVf39/u+1znkWLFhmS8v0f/f777w1JxrRp02xtV27j81y5rc7b/i1atKjQ51OcGgraN40dO9aQZPzwww927U8++aRhsViMffv2GYbxf/uRmjVrGhcuXLD1y8zMNKpUqWLceeedBdaZnZ1tXLx40WjQoIExZswYW/v69esNScbNN99s5Obm2toPHz5seHl5GdHR0bY2R+/Nla+fYeTfz3700UeGJGP9+vX56rryc1DUbf727dsNScaKFSsKfM4FiYqKMho3bpyv3Yz3Mi4uzihXrpyxbds2u/aPP/7YkGSsWrXKMAzDWL16daH7wMtfv7y6Dh06ZBiGYZw5c8aoWLGi0a5dO7v37ErDhw8vcB995f8HZz+DzZs3N7Kzs239fvzxR0OSsXTpUlvb4cOHDQ8PD2PQoEEF1pgnJyfHuO2224xHHnnE1tahQwfjpptucth///79hiRj7ty5V113acGRi+tA5cqV1alTp2Iv/8UXX6hjx46qWbOmsrOzbVPetwobN24s1nq7deumcuX+7yPWpEkTScr3LU5ee3Jysq3t4MGD6tOnj4KCguTh4SEvLy916NBBkrR3715J0r59+5SWlqaHHnrIbn21a9fOd67zF198oUqVKqlnz552z7FVq1YKCgoq1rf9Ranxco8++qjdfJ8+fSRJ69evt9VosVj02GOP2dUYFBSkli1bXrXGiRMnKjs721ZDUR0+fFg9evRQSEiI3nnnHaeWBZCf8f+/sS3uHeYKc+V2JCIiQnXq1LFtR1yhqDU42jetW7dOTZs2tZ2GmWfAgAEyDMN2BDXPfffdJx8fH9t8hQoV1LNnT3377be2I0PZ2dl66aWX1LRpU3l7e8vT01Pe3t7av3+/w21xnz597N6bOnXqKCIiwqWvoVT0bf6NN96oypUr69lnn9W8efO0Z8+eIo9x/Phx1ahRo8DHr+W9/OKLL9SsWTO1atXKrv677rrL7ih63roK2gcWZvPmzcrMzNSwYcNM+//k7Gewe/fu8vDwsM23aNFCknTkyBFbW506dZSdna0FCxZcdfyZM2dq//79Rb4LVN77d+zYsSL1Lw24oPs6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UqWKJOnGG2+0PV6+fHl5enoWehrUkiVLdOHCBS1evFj+/v6SpFmzZqlnz56aMWOGAgMDJUmVK1fWrFmz5OHhocaNG6t79+765ptvSjxccFoUAAAArnu33367LJfdaSo8PFz79+9XTk6OJCksLMyu/44dO5SQkKDy5cvbprvuuku5ubk6dOiQ9u7dK09PT7vlGjdurEqVKhVYQ1JSklq3bm0LFsWxd+9etWzZ0hYsJKlt27bKzc3Vvn37bG033XSTPDw8bPPBwcGFHlUxC0cuAAAA8I93+R/rkpSbm6snnnhCo0aNyte3du3atj/kLU7cGtfX1/faipRkGEaBY17e7uXlle+x3Nzcax7/ajhyAQAAgOve1q1b8803aNDA7tv9y918883avXu3brzxxnyTt7e3mjRpouzsbG3fvt22zL59+3T69OkCa2jRooWSkpL0xx9/OHzc29vbdiSlIE2bNlVSUpLdheXff/+9ypUrp4YNGxa6rCsQLgAAAHDdS0lJUWxsrPbt26elS5fqzTffLPSmNM8++6y2bNmi4cOHKykpSfv379fKlSs1cuRISVKjRo109913a8iQIfrhhx+0Y8cORUdHF3p04pFHHlFQUJB69eql77//XgcPHtQnn3yiLVu2SPr7rlWHDh1SUlKSTp48qaysrHzrePTRR+Xj46P+/fvr119/1fr16zVy5Ej17dvXdr2FOxEuAAAAcG0Mw7VTMfTr108XLlzQrbfequHDh2vkyJF6/PHHC+zfokULbdy4Ufv371f79u3VunVrPf/88woODrb1WbRokUJCQtShQwfdd999evzxx1WjRo0C1+nt7a2vvvpKNWrUULdu3dS8eXNNnz7ddvTk/vvv1913362OHTuqevXqWrp0ab51+Pn5ae3atfrjjz90yy236IEHHlDnzp01a9asYr0uZuOaCwAAAFz3vLy8FB8fr7lz5+Z77PDhww6XueWWW/TVV18VuM6goCB98cUXdm19+/a1mzeuCEN16tTRxx9/7HB9VqvV4WNXrqN58+Zat25dgXVdfkvaPPHx8QX2NxNHLgAAAACYgnABAAAAwBScFgUAAIDr2oYNG9xdwj8GRy4AAAAAmIJwAQAAAKdceYExrg9mvK+ECwAAABRJ3i1TL1686OZKUBLOnz8vKf+vezuDay4AAABQJJ6envLz89Pvv/8uLy8v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D9fq1atdWsPl3LEvmDx5siwWi90UFBTksvHzuHv7Xrdu3Xyvg8Vi0fDhw10yfnZ2tp577jmFhobK19dX9erV09SpU5Wbm+uS8fOcOXNGMTExqlOnjnx9fRUREaFt27a5tIarKZPhYtmyZYqJidGECRO0c+dOtW/fXlFRUXa3PcT/2bhxo4YPH66tW7cqMTFR2dnZ6tq1q86dO+fu0sqEbdu2af78+WrRooW7SynV/vzzT7Vt21ZeXl5avXq19uzZo9dee81tv6gMXCt372vOnTunli1batasWS4Z70qlYd9xww03aPr06dq+fbu2b9+uTp066Z577tHu3btdVkMed+4LbrrpJqWmptqmXbt2uXT80rB937Ztm91rkPejnA8++KBLxp8xY4bmzZunWbNmae/evXr55Zf1yiuv6M0333TJ+Hmio6OVmJio9957T7t27VLXrl1155136tixYy6to1BGGXTrrbcaQ4cOtWtr3LixMXbsWDdVVLakp6cbkoyNGze6u5RS78yZM0aDBg2MxMREo0OHDsbo0aPdXVKp9eyzzxrt2rVzdxmAaUrTvkaSsXz5cpePe7nSsu+oXLmy8c4777h0THfuCyZNmmS0bNnSZeM5Uhq376NHjzbq169v5ObmumS87t27G4MGDbJru++++4zHHnvMJeMbhmGcP3/e8PDwML744gu79pYtWxoTJkxwWR1XU+aOXFy8eFE7duxQ165d7dq7du2qzZs3u6mqsiUjI0OSVKVKFTdXUvoNHz5c3bt315133unuUkq9lStXKiwsTA8++KBq1Kih1q1b6+2333Z3WUCxsK/Jz937jpycHH344Yc6d+6cwsPDXTq2u/cF+/fvV82aNRUaGqqHH35YBw8edOn4pW37fvHiRb3//vsaNGiQLBaLS8Zs166dvvnmG/3222+SpJ9//lnfffedunXr5pLxpb9PzcrJyZGPj49du6+vr7777juX1XE1Ze4Xuk+ePKmcnBwFBgbatQcGBiotLc1NVZUdhmEoNjZW7dq1U7NmzdxdTqn24Ycf6qeffip15zKWVgcPHtTcuXMVGxur8ePH68cff9SoUaNktVrVr18/d5cHOIV9jT137jt27dql8PBw/fXXXypfvryWL1+upk2bumx8d+8LbrvtNi1evFgNGzbUiRMnNG3aNEVERGj37t2qWrWqS2oobdv3FStW6PTp0xowYIDLxnz22WeVkZGhxo0by8PDQzk5OXrxxRf1yCOPuKyGChUqKDw8XC+88IKaNGmiwMBALV26VD/88IMaNGjgsjqupsyFizxXJlXDMFyWXsuyESNG6JdffilVCbc0SklJ0ejRo/XVV1/l+4YAjuXm5iosLEwvvfSSJKl169bavXu35s6dS7hAmcW+5m/u3Hc0atRISUlJOn36tD755BP1799fGzdudEnAKA37gqioKNu/mzdvrvDwcNWvX1/vvvuuYmNjXVJDadu+L1iwQFFRUapZs6bLxly2bJnef/99ffDBB7rpppuUlJSkmJgY1axZU/3793dZHe+9954GDRqkWrVqycPDQzfffLP69Omjn376yWU1XE2ZOy2qWrVq8vDwyPfNUXp6er5vmGBv5MiRWrlypdavX68bbrjB3eWUajt27FB6erratGkjT09PeXp6auPGjXrjjTfk6empnJwcd5dY6gQHB+fb2Tdp0oQbLaBMYl/zf9y97/D29taNN96osLAwxcXFqWXLlnr99dddMnZp3Bf4+/urefPm2r9/v8vGLE3b9yNHjujrr79WdHS0S8d9+umnNXbsWD388MNq3ry5+vbtqzFjxiguLs6lddSvX18bN27U2bNnlZKSoh9//FGXLl1SaGioS+soTJkLF97e3mrTpo3tLgF5EhMTFRER4aaqSjfDMDRixAh9+umnWrduXan6AJZWnTt31q5du5SUlGSbwsLC9OijjyopKUkeHh7uLrHUadu2bb7bVP7222+qU6eOmyoCio99TenddxiGoaysLJeMVRr3BVlZWdq7d6+Cg4NdNmZp2r4vWrRINWrUUPfu3V067vnz51WunP2fzR4eHi6/FW0ef39/BQcH688//9TatWt1zz33uKUOR8rkaVGxsbHq27evwsLCFB4ervnz5ys5OVlDhw51d2ml0vDhw/XBBx/os88+U4UKFWzfxAUEBMjX19fN1ZVOFSpUyHdesb+/v6pWrcq1KgUYM2aMIiIi9NJLL+mhhx7Sjz/+qPnz52v+/PnuLg0oFnfva86ePasDBw7Y5g8dOqSkpCRVqVJFtWvXLvHxS8O+Y/z48YqKilJISIjOnDmjDz/8UBs2bNCaNWtcMn5p2Bc89dRT6tmzp2rXrq309HRNmzZNmZmZLj0Vp7Rs33Nzc7Vo0SL1799fnp6u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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def plot_prediction(model, sample_idx=0, classes=range(10)):\n", " fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))\n", @@ -437,11 +551,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average NLL over the last 100 samples at step 0: -0\n", + "Average NLL over the last 100 samples at step 100: 387\n", + "Average NLL over the last 100 samples at step 200: 173\n", + "Average NLL over the last 100 samples at step 300: 488\n", + "Average NLL over the last 100 samples at step 400: 63\n", + "Average NLL over the last 100 samples at step 500: 144\n", + "Average NLL over the last 100 samples at step 600: 241\n", + "Average NLL over the last 100 samples at step 700: 148\n", + "Average NLL over the last 100 samples at step 800: 117\n", + "Average NLL over the last 100 samples at step 900: 89\n", + "Average NLL over the last 100 samples at step 1000: 148\n", + "Average NLL over the last 100 samples at step 1100: 151\n", + "Average NLL over the last 100 samples at step 1200: 159\n", + "Average NLL over the last 100 samples at step 1300: 333\n", + "Average NLL over the last 100 samples at step 1400: 51\n", + "Average NLL over the last 100 samples at step 1500: 90\n" + ] + } + ], "source": [ "lr = LogisticRegression(input_size=X_train.shape[1], output_size=10)\n", "\n", @@ -477,11 +614,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQnElEQVR4nO3deVhUdf//8dfIMiwq5saiCGiuuUsLmImaFi7fbLUsdyxzC7lbNCuXLLLFm8otyyTLzG+lZuVGuZZaalKm3ma3C6ggaQkuhQLn90c/5uvIoAweZsCej+s61+X5zOecz3sWz+E1ZxmLYRiGAAAAAOAKVXJ3AQAAAACuDoQLAAAAAKYgXAAAAAAwBeECAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhItyzGKxlGhat26dW+uMiYlRTEyMW2soaxMnTpTFYinVsgMHDlTlypVNrWfgwIEKDw8v1bI5OTl64YUXFBMTo6CgIFWuXFktWrTQ1KlT9ddff5laJ3C12rJli+69914FBwfL29tbQUFBuueee7R58+YrWu+LL76opUuXmlPkZRw9elQTJ05UamqqS8ZzxsGDB2WxWPTqq6+ats5169bJYrHok08+uWxfR9t8R/s6i8WiiRMn2uZ3796tiRMn6uDBg0XWeSXb7SvVpUsXDRs2zC1jX8rFr19ycrIsFovD1+9Sli9fbreeC4WHh2vgwIGlrtFsixcv1gMPPKBrr71Wvr6+Cg8P14MPPqh9+/bZ9Tt//rwaNGigpKQk9xR6BQgX5djmzZvtpu7du8vX17dIe9u2bd1a58yZMzVz5ky31oCSS0tLU1JSktq2bas5c+Zo2bJluueeezRx4kT17NlThmG4u0SgXHvzzTfVvn17HT58WC+//LK++uorvfrqqzpy5IhuvvlmTZ8+vdTrdnW4mDRpUrkMF+4WFxdXoqC4efNmxcXF2eZ3796tSZMmOfzj+Nlnn9WSJUvMLLNEPvvsM3377bd69tlnXT62s3r06KHNmzcrODjYqeWWL1+uSZMmOXxsyZIl5eq5T506VWfPntX48eO1cuVKTZkyRTt27FDbtm21a9cuWz8vLy8999xzmjx5sk6cOOHGip3n6e4CULybbrrJbr5WrVqqVKlSkfaLnT17Vn5+fmVZmp1mzZq5bCxcuYiICB08eFD+/v62ts6dO8vf319PPPGEvv32W918881urBAov7799lvFx8ere/fuWrJkiTw9/283ev/99+vOO+/UY489pjZt2qh9+/ZurLT8cfW+6UrUrVtXdevWvWy/y+2PL9SgQYMrKanUXnzxRd15552qU6eOaessq/eyVq1aqlWrlqnrbNOmjanru1Kff/65ateubdfWuXNnhYeH69///rfeeecdW/sDDzyghIQEvfXWW3r66addXWqpceSigouJiVHz5s21YcMGRUdHy8/PT4MHD5ZU9HBjIUeHCDMzM/XII4+obt268vb2VkREhCZNmqS8vLwS1XDhoeLCw9mvvPKKpk6dqvDwcPn6+iomJka//PKLzp8/r7FjxyokJEQBAQG68847lZWVZbfORYsWqVu3bgoODpavr6+aNm2qsWPH6syZM0XGf/vtt9WoUSNZrVY1a9ZMH374ocPDz+fOndOUKVPUpEkTWa1W1apVS4MGDdJvv/122efoiDM1StKuXbvUpUsX+fv7q1atWho5cqTOnj1r18cwDM2cOVOtW7eWr6+vrrnmGt1zzz3av39/qWp0xN/f3y5YFLrhhhskSenp6aaNBVxtEhMTZbFYNGvWLLtgIUmenp6aOXOmLBaLXnrpJVt7cafDXHzqjcVi0ZkzZ/Tee+/ZTnst3LYWni6SkpKiQYMGqXr16vL391evXr2KbB+KOw3kwm31unXrdP3110uSBg0aZBuvuFNLnK3hUvumtLQ0PfTQQ6pdu7asVquaNm2q1157TQUFBUXGLCgo0AsvvKB69erJx8dHkZGR+vrrr+36/Prrrxo0aJAaNmwoPz8/1alTR7169dLOnTsdPo+//vpLCQkJCgoKkq+vrzp27KgdO3bY9SnpqbAXvmbJycm69957JUmdOnWyvabJycmSHH8OSrrN37Fjh3r27Gl7zUJCQtSjRw8dPnz4kvXt2LFD33//vfr162fXbtZ7mZOTo8cff1wRERHy9vZWnTp1FB8fX2Q/mJOTo6FDh6pGjRqqXLmybr/9dv3yyy9F6i3utKiVK1eqS5cuCggIkJ+fn5o2barExETb6zpjxgxJ9qeTF67D0f+HknwGLzw1b9q0aYqIiFDlypUVFRWlLVu2XPJ1v5SLg4UkhYSEqG7dukX2v97e3urTp4/mzJlToc4qIFxcBTIyMvTQQw+pb9++Wr58uYYPH+7U8pmZmbrhhhu0atUqPffcc1qxYoWGDBmixMREDR06tNR1zZgxQ99++61mzJihd955R//5z3/Uq1cvDRkyRL/99pveffdd2ykFFx5WlqR9+/ape/fumjt3rlauXKn4+Hj97//+r3r16mXXb86cOXr44YfVsmVLLV68WM8884wmTZpU5DqUgoIC3XHHHXrppZfUt29fffnll3rppZeUkpKimJgY/fnnn04/v5LWKP197mT37t3VpUsXLV26VCNHjtRbb72lPn362PV75JFHFB8fr1tvvVVLly7VzJkztWvXLkVHR+vYsWOXrKdwZ1jaa3DWrFkjSbruuutKtTxwtcvPz9fatWsVGRlZ7LfaoaGhateundasWaP8/Hyn1r9582b5+vqqe/futtNeLz7ldMiQIapUqZI+/PBDJSUl6fvvv1dMTIxOnjzp1Fht27bVvHnzJEnPPPOMbbyLt8WOlLQGR/um3377TdHR0Vq9erWef/55LVu2TLfeeqsef/xxjRw5sshY06dP18qVK5WUlKQPPvhAlSpVUmxsrN0pS0ePHlWNGjX00ksvaeXKlZoxY4Y8PT114403au/evUXW+fTTT2v//v1655139M477+jo0aOKiYm54i9xevTooRdffFHS3/u/wte0R48exS5Tkm3+mTNn1LVrVx07dkwzZsxQSkqKkpKSVK9ePZ06deqSNX3xxRfy8PDQLbfc4vDxK3kvz549q44dO+q9997T6NGjtWLFCj311FNKTk7W//zP/9j+GDYMQ71799b777+vf/3rX1qyZIluuukmxcbGluh1nTt3rrp3766CggLNnj1bn3/+uUaPHm0LVs8++6zuueceSfankxd3apWzn8ELX/MFCxbozJkz6t69u7Kzs219CoNIaa/t2L9/vw4dOuRw/xsTE6NDhw7p559/LtW63cJAhTFgwADD39/frq1jx46GJOPrr78u0l+SMWHChCLtYWFhxoABA2zzjzzyiFG5cmXj0KFDdv1effVVQ5Kxa9euS9bVsWNHo2PHjrb5AwcOGJKMVq1aGfn5+bb2pKQkQ5LxP//zP3bLx8fHG5KM7Oxsh+svKCgwzp8/b6xfv96QZPz444+GYRhGfn6+ERQUZNx44412/Q8dOmR4eXkZYWFhtraFCxcakoxPP/3Uru/WrVsNScbMmTMv+RwnTJhgXOq/S3E1Gsbf75sk4/XXX7db5oUXXjAkGd98841hGIaxefNmQ5Lx2muv2fVLT083fH19jSeffNJunRc+P8MwjEmTJhkeHh7GunXrLvlcHPnxxx8NX19f484773R6WeCfIjMz05Bk3H///Zfs16dPH0OScezYMcMwHP9/NQzH2xV/f3+77XOhefPmGZKK/B/99ttvDUnGlClTbG0Xb+MLXbytLtz+zZs375LPpzQ1FLdvGjt2rCHJ+O677+zaH330UcNisRh79+41DOP/9iMhISHGn3/+aeuXk5NjVK9e3bj11luLrTMvL884d+6c0bBhQ2PMmDG29rVr1xqSjLZt2xoFBQW29oMHDxpeXl5GXFycrc3Re3Px62cYRfezH3/8sSHJWLt2bZG6Lv4clHSbv23bNkOSsXTp0mKfc3FiY2ONJk2aFGk3471MTEw0KlWqZGzdutWu/ZNPPjEkGcuXLzcMwzBWrFhxyX3gha9fYV0HDhwwDMMwTp06ZVStWtW4+eab7d6zi40YMaLYffTF/x+c/Qy2aNHCyMvLs/X7/vvvDUnGwoULbW0HDx40PDw8jMGDBxdbY3HOnz9vxMTEGFWrVjXS0tKKPL5v3z5DkjFr1iyn1+0uHLm4ClxzzTXq3LlzqZf/4osv1KlTJ4WEhCgvL882FX6rsH79+lKtt3v37qpU6f8+Yk2bNpWkIt/iFLanpaXZ2vbv36++ffsqKChIHh4e8vLyUseOHSVJe/bskSTt3btXmZmZuu++++zWV69evSLnOn/xxReqVq2aevXqZfccW7duraCgoFJ921+SGi/04IMP2s337dtXkrR27VpbjRaLRQ899JBdjUFBQWrVqtVla3zuueeUl5dnq6GkDh48qJ49eyo0NNTuXE8ApWP8/29sS3uHuUu5eDsSHR2tsLAw23bEFUpag6N905o1a9SsWTPbaZiFBg4cKMMwbEdQC911113y8fGxzVepUkW9evXShg0bbEeG8vLy9OKLL6pZs2by9vaWp6envL29tW/fPofb4r59+9q9N2FhYYqOjnbpayiVfJt/7bXX6pprrtFTTz2l2bNna/fu3SUe4+jRow5Pwyl0Je/lF198oebNm6t169Z29d922212R9EL11XcPvBSNm3apJycHA0fPty0/0/OfgZ79OghDw8P23zLli0lSYcOHbK1hYWFKS8vT3PnznWq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TStWrNCWLVt04403SpLmzp2rpk2bFlvDhx9+qN9++01bt25V9erVJUnXXnut7fHKlSvL09PzkqdBLViwQH/++afmz58vf39/SdL06dPVq1cvTZ06VYGBgZKka665RtOnT5eHh4eaNGmiHj166Ouvvy7zcMFpUQAAALjq3XTTTbJccKepqKgo7du3T/n5+ZKkyMhIu/7bt29XcnKyKleubJtuu+02FRQU6MCBA9qzZ488PT3tlmvSpImqVatWbA2pqalq06aNLViUxp49e9SqVStbsJCk9u3bq6CgQHv37rW1XXfddfLw8LDNBwcHX/Koilk4cgEAAIB/vAv/WJekgoICPfLIIxo9enSRvvXq1bP9IW9x4ta4vr6+V1akJMMwih3zwnYvL68ijxUUFFzx+JfDkQsAAABc9bZs2VJkvmHDhnbf7l+obdu22rVrl6699toik7e3t5o2baq8vDxt27bNtszevXt18uTJYmto2bKlUlNT9fvvvzt83Nvb23YkpTjNmjVTamqq3YXl3377rSpVqqRGjRpdcllXIFwAAADgqpeenq6EhATt3btXCxcu1JtvvnnJm9I89dRT2rx5s0aMGKHU1FTt27dPy5Yt06hRoyRJjRs31u23366hQ4fqu+++0/bt2xUXF3fJoxMPPPCAgoKC1Lt3b3377bfav3+/Pv30U23evFnS33etOnDggFJTU3X8+HHl5uYWWceDDz4oHx8fDRgwQD///LPWrl2rUaNGqV+/frbrLdyJcAEAAIArYxiunUqhf//++vPPP3XDDTdoxIgRGjVqlB5++OFi+7ds2VLr16/Xvn371KFDB7Vp00bPPvusgoODbX3mzZun0NBQdezYUXfddZcefvhh1a5du9h1ent7a/Xq1apdu7a6d++uFi1a6KWXXrIdPbn77rt1++23q1OnTqpVq5YWLlxYZB1+fn5atWqVfv/9d11//fW655571KVLF02fPr1Ur4vZuOYCAAAAVz0vLy8lJSVp1qxZRR47ePCgw2Wuv/56rV69uth1BgUF6YsvvrBr69evn928cVEYCgsL0yeffOJwfVar1eFjF6+jRYsWWrNmTbF1XXhL2kJJSUnF9jcTRy4AAAAAmIJwAQAAAMAUnBYFAACAq9q6devcXcI/BkcuAAAAAJiCcAEAAACnXHyBMa4OZryvhAsAAACUSOEtU8+d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Xbt22rhx4yX75+bmavz48QoLC5PValWDBg307rvvuqhaAIAreLq7AABAxbNo0SLFx8dr5syZat++vd566y3FxsZq9+7dqlevnsNl7rvvPh07dkxz587Vtddeq6ysLOXl5bm4cgBAWSJcAACcNm3aNA0ZMkRxcXGSpKSkJK1atUqzZs1SYmJikf4rV67U+vXrtX//flWvXl2SFB4e7sqSAQAu4NRpUbNmzVLLli1VtWpVVa1aVVFRUVqxYkVZ1QYAKIfOnTun7du3q1u3bnbt3bp106ZNmxwus2zZMkVGRurll19WnTp11KhRIz3++OP6888/ix0nNzdXOTk5dhMAoHxz6shF3bp19dJLL+naa6+VJL333nu64447tGPHDl133XVlUiAAoHw5fvy48vPzFRgYaNceGBiozMxMh8vs379f33zzjXx8fLRkyRIdP35cw4cP1++//17sdReJiYmaNGmS6fUDAMqOU0cuevXqpe7du6tRo0Zq1KiRXnjhBVWuXFlbtmwpdhm+eQKAq5PFYrGbNwyjSFuhgoICWSwWLViwQDfccIO6d++uadOmKTk5udijF+PGjVN2drZtSk9PN/05AADMVeq7ReXn5+ujjz7SmTNnFBUVVWy/xMREBQQE2KbQ0NDSDgkAKAdq1qwpDw+PIkcpsrKyihzNKBQcHKw6deooICDA1ta0aVMZhqHDhw87XMZqtdpOwy2cAADlm9PhYufOnapcubKsVquGDRumJUuWqFmzZsX255snALi6eHt7q127dkpJSbFrT0lJUXR0tMNl2rdvr6NHj+r06dO2tl9++UWVKlVS3bp1y7ReAIDrOB0uGjdurNTUVG3ZskWPPvqoBgwYoN27dxfbn2+eAODqk5CQoHfeeUfvvvuu9uzZozFjxigtLU3Dhg2T9PcXS/3797f179u3r2rUqKFBgwZp9+7d2rBhg5544gkNHjxYvr6+7noaAACTOX0rWm9vb9sF3ZGRkdq6datef/11vfXWW6YXBwAon/r06aMTJ05o8uTJysjIUPPmzbV8+XKFhYVJkjIyMpSWlmbrX7lyZaWkpGjUqFGKjIxUjRo1dN9992nKlCnuegoAgDJwxb9zYRiGcnNzzagFAFCBDB8+XMOHD3f4WHJycpG2Jk2aFDmVCgBwdXEqXDz99NOKjY1VaGioTp06pY8++kjr1q3TypUr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(lr, sample_idx=0)" ] @@ -513,18 +661,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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Zbil7du343Q6eeWVV9iyZQvPPvssL7/8Mg899JDVpbm0BQsWMHnyZKZPn8769esZPHgwo0ePJjk52erS3MqyZcu44447WL16NUuWLKG8vJyRI0dSUFBgdWluac2aNbz66qt0797d6lJciqb2uoGvv/6aKVOm8Omnn9KlSxfWr19Pz549rS7Lrc2ePZt58+axd+9eq0txWf3796dXr17Mmzev4lxCQgJjx45l1qxZFlbm3jIzM4mIiGDZsmUMGTLE6nLcSn5+Pr169WLu3Lk89thj9OzZkzlz5lhdlktQz4iLS09P5+abb+add94hICDA6nIajdzcXMLDw60uw2WVlpaSmJjIyJEjK50fOXIkK1eutKiqxiE3NxdA/3/rwB133MGFF17IiBEjrC7F5bjERnlSNcMwmDBhApMmTaJPnz4kJSVZXVKjsGfPHl544QWefvppq0txWVlZWTgcDiIjIyudj4yM5NChQxZV5f4Mw2DKlCmcc845dO3a1epy3MqHH37IunXrWLNmjdWluCT1jDRAjzzyCDab7ZTH2rVreeGFF7Db7UybNs3qkl1Sdb/Px0tNTeWCCy7gyiuv5KabbrKocvdhs9kq3TYM44RzUnv+/ve/s2nTJj744AOrS3ErKSkp3H333bz77rv4+flZXY5L0piRBigrK4usrKxTtomLi+Pqq6/myy+/rPTm7XA48PT05Nprr+Wtt96q61JdWnW/z3+8uaSmpjJs2DD69+/P/Pnz8fBQlj9dpaWlBAQE8PHHH3PppZdWnL/77rvZsGEDy5Yts7A693TnnXfy2WefsXz5cuLj460ux6189tlnXHrppXh6elacczgc2Gw2PDw8KCkpqfQ1OZHCiAtLTk7GbrdX3E5NTWXUqFF88skn9O/fn1atWllYnXs5ePAgw4YNo3fv3rz77rt6Y6kF/fv3p3fv3sydO7fiXOfOnbnkkks0gLUWGYbBnXfeyaJFi/jpp59o37691SW5nby8PPbv31/p3A033ECnTp2YOnWqLolVg8aMuLDWrVtXuh0UFARA27ZtFURqUWpqKkOHDqV169Y89dRTZGZmVnwtKirKwspc25QpU7juuuvo06cPAwYM4NVXXyU5OZlJkyZZXZpbueOOO3j//ff5/PPPCQ4OrhiTExoair+/v8XVuYfg4OATAkdgYCBNmzZVEKkmhRGRP/Hdd9+xe/dudu/efULIU8fi6Rs3bhyHDx9m5syZpKWl0bVrVxYvXkxsbKzVpbmVP6ZODx06tNL5N998kwkTJtR/QSJV0GUaERERsZRG4ImIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGx1P8DR6Abafq1E70AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def sigmoid(X):\n", " # Clip X to prevent overflow or underflow\n", " X = np.clip(X, -500, 500) # This ensures that np.exp(X) doesn't overflow\n", - " return None # TODO\n", + " return 1 / (1 + np.exp(-X))\n", "\n", "\n", "def dsigmoid(X):\n", - " return None # TODO\n", + " return sigmoid(X) * (1 - sigmoid(X))\n", "\n", "\n", "x = np.linspace(-5, 5, 100)\n", @@ -544,7 +703,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -569,17 +728,17 @@ "\n", " def forward_hidden(self, X):\n", " # Compute the linear combination of the input and weights\n", - " self.Z_h = None # TODO\n", + " self.Z_h = np.dot(X, self.W_h) + self.b_h\n", "\n", " # Apply the sigmoid activation function\n", - " return None # TODO\n", + " return sigmoid(self.Z_h)\n", "\n", " def forward_output(self, H):\n", " # Compute the linear combination of the hidden layer activation and weights\n", - " self.Z_o = None # TODO\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", "\n", - " # Apply the sigmoid activation function\n", - " return None # TODO\n", + " # Apply the softmax activation function\n", + " return softmax(self.Z_o)\n", "\n", " def forward(self, X):\n", " # Compute the forward activations of the hidden and output layers\n", @@ -590,7 +749,7 @@ "\n", " def loss(self, X, y):\n", " y_onehot = one_hot(self.output_size, y)\n", - " return None # TODO\n", + " return nll(one_hot(self.output_size, y), self.forward(X))\n", "\n", " def grad_loss(self, X, y_true):\n", " y_true = one_hot(self.output_size, y_true)\n", @@ -645,7 +804,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -655,27 +814,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "3539.197487795086" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.loss(X_train, y_train)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0.09561231172233137" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.accuracy(X_train, y_train)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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OKA9e/bYlS9cuFAWi0UdO3a0K1++fLltVFuSLl68qM8//1zt2rWzJW8WiyXPtfjLL7/MdxrJkiVL7J68c+LECW3fvt2UH4N15pwW5ppvsVjUokUL/ec//1H58uXznMerNWzY8Jo3qt/Ie9m9e3f9/PPPqlSpksP4c0cHct/T/PrAawkPD5e/v7/mzJlzzaclOXPenf0Mmu3hhx+WJK1Zs8aufPXq1SpVqpTtKW65ct+/kvTYf0YubmK9e/fWSy+9pPHjx6t9+/Y6cOCAZsyYIX9/f7t6kyZNUnx8vMLDwzVixAg1aNBAf/75p44fP67Vq1drzpw5pg5JXk94eLgqVKigwYMHa8KECfLy8tKiRYvyDFmXKlVKEydO1DPPPKNHHnlEAwYM0IULFzRx4kQFBQXZZf+PP/64Fi1apK5du2rkyJG6/fbb5eXlpZMnT2rjxo26//779eCDD5oeYy5vb2+9+eabunTpkm677TZt375dkydPVkREhNq2bStJatOmjZ5++mn1799fu3fv1l133aXSpUsrJSVF33zzjZo1a6Znn30235gmTZqkSZMm6euvv77ufRcnTpzQrl27JEk///yzJNl+tbZ27doKDQ0t8LkA/knatGmj2NhYRUVFqW3btho2bJhq1qyppKQkzZw5U99++61iY2MVHh5u26Znz54aP368Hn/8cf373//Wn3/+qbffftvh06SaNWumTZs26fPPP1dQUJDKli1r9+XH7t27FRkZqUcffVTJyckaN26cqlevbveUwN69e+upp57SkCFD9PDDD+vEiRN67bXX8vx+QN26deXr66tFixapUaNGKlOmjKpVq3bdL5QKEkN+Ro0apYULF6pbt26aNGmSatWqpS+//FKzZs3Ss88+q/r169vV9/DwUOfOnRUdHa2cnBxNmzZN6enpdj+Y1r17d8XFxalhw4Zq3ry5EhIS9Prrr+fbb509e1YPPvigBg0apLS0NE2YMEE+Pj52CWFhNW3aVNJfTzIsW7asfHx8FBIS4nBUpKDX/C+++EKzZs3SAw88oDp16sgwDC1fvlwXLlxQ586drxlPhw4dNH/+fP300095zq10Y+9lVFSUPv30U911110aNWqUmjdvrpycHCUlJWn9+vX617/+pTvuuENdunTRXXfdpeeee06XL19WaGiotm3bpg8//PC6bZQpU0Zvvvmm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NW7cWH/88YcWLFjgsN69996rl156Sc8995z+/PNPDRgwQH369NG+fftsdV555RVVrVpVMTExOnr0qMqXL69bb71VL7zwgqsOp1hzOrno2bOnzp8/r0mTJiklJUVNmzbV6tWrVatWraKIDwAAALgh9evX144dO+zK+vXr57DuxIkTr/kwIovFohEjRmjEiBFmhnjTKNQN3UOGDNGQIUPMjgUAAABACeb0j+gBAAAAgCMkFwAAAABMQXIBAAAAwBQkFwAAAABMQXIBAAAAwBQkFwAAAABMQXIBAAAAwBQkFwAAAABMQXIBAACAG2OxuHYpxmrXrq3Y2FjbusVi0cqVK29on2bsw1UK9QvdAAAAAK4vJSVFFSpUKFDdl19+WStXrlRiYmKh9+FuJBcAAADA32RmZsrb29uUfQUGBhaLfbgK06IAAABwU+vQoYOGDRumYcOGqXz58qpUqZJefPFFGYYh6a+pTJMnT1a/fv3k7++vQYMGSZK2b9+uu+66S76+vgoODtaIESN0+fJl237Pnj2rHj16yNfXVyEhIVq0aFGetq+e0nTy5Ek9/vjjqlixokqXLq3Q0FB9++23iouL08SJE/X999/LYrHIYrEoLi7O4T727dunu+++W76+vqpUqZKefvppXbp0yfZ6v3799MADD+iNN95QUFCQKlWqpKFDh+rKlSsmnlXHGLkoIf4+d6+4mThxortDKHGOHz/u7hDytWnTJneHAACA6T744AMNHDhQ3377rXbv3q2nn35atWrVsiUSr7/+ul566SW9+OKLkv76A/7ee+/VK6+8onnz5umXX36xJSgLFiyQ9Ncf8cnJydqwYYO8vb01YsQInT17Nt8YLl26pPbt26t69epatWqVAgMDtWfPHuXk5Khnz5768ccftXbtWn311VeSJH9//zz7+P3333Xffffpzjvv1K5du3T27FlFRkZq2LBhtmREkjZu3KigoCBt3LhRR44cUc+ePdWyZUvb8RYVkgsAAADc9IKDg/Wf//xHFotFDRo00L59+/Sf//zH9sf23XffrdGjR9vq9+nTR7169VJUVJQkqV69enr77bfVvn17zZ49W0lJSVqzZo127typO+64Q5I0b948NWrUKN8YFi9erF9++UW7du1SxYoVJUm33HKL7fUyZcrI09PzmtOgFi1apD/++EMLFy5U6dKlJUkzZsxQ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AJiC5AIAAACAKUguAACFMmvWLIWEhMjHx0etW7fW1q1b8627fPlyde7cWVWqVFG5cuUUFhamdevWuTBaAIArOJ1cnDp1Sk899ZQqVaokPz8/tWzZUgkJCUURGwCgmFq2bJmioqI0btw47d27V+3atVNERISSkpIc1t+yZYs6d+6s1atXKyEhQR07dlSPHj20d+9eF0cOAChKns5U/u2339SmTRt17NhRa9asUdWqVfXzzz+rfPnyRRQeAKA4mj59ugYOHKjIyEhJUmxsrNatW6fZs2crJiYmT/3Y2Fi79SlTpuizzz7T559/rlatWrkiZACACziVXEybNk3BwcFasGCBrax27dpmxwQAKMYyMzOVkJCgMWPG2JV36dJF27dvL9A+cnJydPHiRVWsWDHfOhkZGcrIyLCtp6enFy5gAIDLODUtatWqVQoNDdWjjz6qqlWrqlWrVnrvvfeuuU1GRobS09PtFgBAyXXu3DllZ2crICDArjwgIECpqakF2sebb76py5cv67HHHsu3TkxMjPz9/W1LcHDwDcUNACh6TiUXR48e1ezZs1WvXj2tW7dOgwcP1ogRI7Rw4cJ8t6FzAICbk8VisVs3DCNPmSNLlizRyy+/rGXLlqlq1ar51hs7dqzS0tJsS3Jy8g3HDAAoWk5Ni8rJyVFoaKimTJkiSWrVqpX279+v2bNnq0+fPg63GTt2rKKjo23r6enpJBgAUIJVrlxZHh4eeUYpzp49m2c042rLli3TwIED9fHHH+uee+65Zl2r1Sqr1XrD8QIAXMepkYugoCA1btzYrqxRo0b5Ph1E+qtzKFeunN0CACi5vL291bp1a8XHx9uVx8fHKzw8PN/tlixZon79+mnx4sXq1q1bUYcJAHADp0Yu2rRpo0OHDtmV/fTTT6pVq5apQQEAirfo6Gj17t1boaGhCgsL09y5c5WUlKTBgwdL+mvU+tSpU7Zps0uWLFGfPn301ltv6c4777SNevj6+srf399txwEAMJdTycWoUaMUHh6uKVOm6LHHHtN3332nuXPnau7cuUUVHwCgGOrZs6fOnz+vSZMmKSUlRU2bNtXq1attXzalpKTYjWq/++67ysrK0tChQzV06FBbed++fRUXF+fq8AEARcSp5OK2227TihUrNHbsWE2aNEkhISGKjY3Vk08+WVTxAQCKqSFDhmjIkCEOX7s6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hMjX11d16tTRpEmTlJOT45L2c128eFFRUVGqVauWfH19FR4erl27drk0huspkcnFsmXLFBUVpXHjxmnv3r1q166dIiIi7B57iP9n8+bNGjp0qHbu3Kn4+HhlZWWpS5cuunz5srtDKxF27dqluXPnqnnz5u4OpVj77bff1KZNG3l5eWnNmjU6cOCA3nzzTbf9ojJwo9zd11y+fFktWrTQjBkzXNLe1YpD31GjRg1NnTpVu3fv1u7du3X33Xfr/vvv1/79+10WQy539gVNmjRRSkqKbdm3b59L2y8O1/ddu3bZnYPcH+V89NFHXdL+tGnTNGfOHM2YMUMHDx7Ua6+9ptdff13vvPOOS9rPFRkZqfj4eH344Yfat2+funTponvuuUenTp1yaRzXZJRAt99+uzF48GC7soYNGxpjxoxxU0Qly9mzZw1JxubNm90dSrF38eJFo169ekZ8fLzRvn17Y+TIke4Oqdh6/vnnjbZt27o7DMA0xamvkWSsWLHC5e3+XXHpOypUqGC8//77Lm3TnX3BhAkTjBYtWrisPUeK4/V95MiRRt26dY2cnByXtNetWzdjwIABdmUPPfSQ8dRTT7mkfcMwjN9//93w8PAwvvjiC7vyFi1aGOPGjXNZHNdT4kYuMjMzlZCQoC5dutiVd+nSRdu3b3dTVCVLWlqaJKlixYpujqT4Gzp0qLp166Z77rnH3aEUe6tWrVJoaKgeffRRVa1aVa1atdJ7773n7rCAQqGvycvdfUd2draWLl2qy5cvKywszKVtu7svOHz4sKpVq6aQkBA9/vjjOnr0qEvbL27X98zMTH300UcaMGCALBaLS9ps27atvv76a/3000+SpO+//17ffPONunbt6pL2pb+mZmVnZ8vHx8eu3NfXV998843L4rieEvcL3efOnVN2drYCAgLsygMCApSamuqmqEoOwzAUHR2ttm3bqmnTpu4Op1hbunSp9uzZU+zmMhZXR48e1ezZsxUdHa0XXnhB3333nUaMGCGr1ao+ffq4OzzAKfQ19tzZd+zbt09hYWH6888/VaZMGa1YsUKNGzd2Wfvu7gvuuOMOLVy4UPXr19eZM2c0efJkhYeHa//+/apUqZJLYihu1/eVK1fqwoUL6tevn8vafP7555WWlqaGDRvKw8ND2dnZevXVV/XEE0+4LIayZcsqLCxMr7zyiho1aqSA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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(model, sample_idx=5)" ] @@ -691,9 +883,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random init: train loss: 3539.19749, train acc: 0.096, test acc: 0.081\n", + "Epoch #1, train loss: 2718.68135, train acc: 0.607, test acc: 0.596\n", + "Epoch #2, train loss: 1902.03777, train acc: 0.737, test acc: 0.715\n", + "Epoch #3, train loss: 1342.20825, train acc: 0.826, test acc: 0.785\n", + "Epoch #4, train loss: 999.93848, train acc: 0.876, test acc: 0.844\n", + "Epoch #5, train loss: 786.93663, train acc: 0.898, test acc: 0.881\n", + "Epoch #6, train loss: 654.81026, train acc: 0.914, test acc: 0.885\n", + "Epoch #7, train loss: 566.50587, train acc: 0.925, test acc: 0.896\n", + "Epoch #8, train loss: 496.33027, train acc: 0.936, test acc: 0.904\n", + "Epoch #9, train loss: 440.83985, train acc: 0.940, test acc: 0.911\n", + "Epoch #10, train loss: 394.47204, train acc: 0.947, test acc: 0.919\n", + "Epoch #11, train loss: 353.82190, train acc: 0.957, test acc: 0.922\n", + "Epoch #12, train loss: 320.77125, train acc: 0.959, test acc: 0.922\n", + "Epoch #13, train loss: 291.76796, train acc: 0.966, test acc: 0.926\n", + "Epoch #14, train loss: 266.82674, train acc: 0.971, test acc: 0.930\n", + "Epoch #15, train loss: 246.34456, train acc: 0.973, test acc: 0.933\n" + ] + } + ], "source": [ "losses, accuracies, accuracies_test = [], [], []\n", "losses.append(model.loss(X_train, y_train))\n", @@ -716,9 +931,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGxCAYAAACTN+exAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABO3ElEQVR4nO3deXxU5d3//9dkm+xDFpJJIEAQwpaACAoBFESIoGx698YWTbFS1F8VTYW63f1We9eC0ltp/eJaW7lvRbHfu4IrUZRFKVsEwr7KFsgKJJN9sp3fH4HRsCckOZnJ+/l4zAPmzGfOfA7o5M11rnMui2EYBiIiIiJuxsvsBkRERESaQiFGRERE3JJCjIiIiLglhRgRERFxSwoxIiIi4pYUYkRERMQtKcSIiIiIW1KIEREREbekECMiIiJuSSFGpJ2wWCxX9Fi9evVVfc6zzz6LxWJp0ntXr17dLD2422eLSNP4mN2AiLSO9evXN3j+hz/8gVWrVrFy5coG2/v27XtVn/PLX/6ScePGNem91113HevXr7/qHkSkfVCIEWknhg4d2uB5x44d8fLyOm/7ucrLywkMDLziz+ncuTOdO3duUo+hoaGX7UdE5CydThIRl1GjRpGYmMg333zDsGHDCAwM5L777gPggw8+ICUlhZiYGAICAujTpw9PPvkkZWVlDfZxodNJ3bp1Y8KECaSnp3PdddcREBBA7969+fvf/96g7kKndO69916Cg4M5ePAgt912G8HBwcTFxTF79mycTmeD9x8/fpyf/OQnhISE0KFDB+6++24yMjKwWCwsWrSoSX8mH3/8McnJyQQGBhISEsLYsWPPG9UqKCjg/vvvJy4uDqvVSseOHRk+fDhfffWVq2br1q1MmDCBqKgorFYrsbGx3H777Rw/frxJfYmIRmJE5Bw5OTncc889PP7448ydOxcvr/p/6xw4cIDbbruNtLQ0goKC2Lt3Ly+88AKbNm0675TUhWzbto3Zs2fz5JNPEh0dzVtvvcWMGTPo0aMHN9100yXfW11dzaRJk5gxYwazZ8/mm2++4Q9/+AM2m43f/e53AJSVlXHzzTdz+vRpXnjhBXr06EF6ejp33XVXk/8s3nvvPe6++25SUlJ4//33cTqdzJ8/n1GjRvH1118zYsQIAFJTU9myZQt//OMfSUhIoKioiC1btnDq1ClXb2PHjiU+Pp5XXnmF6OhocnNzWbVqFSUlJU3uT6TdM0SkXZo+fboRFBTUYNvIkSMNwPj6668v+d66ujqjurraWLNmjQEY27Ztc732zDPPGOd+tXTt2tXw9/c3jh496tpWUVFhhIeHGw888IBr26pVqwzAWLVqVYM+AeMf//hHg33edtttRq9evVzPX3nlFQMwli9f3qDugQceMADj7bffvuQxnfvZtbW1RmxsrJGUlGTU1ta66kpKSoyoqChj2LBhrm3BwcFGWlraRff93XffGYCxbNmyS/YgIo2j00ki0kBYWBijR48+b/uhQ4eYNm0adrsdb29vfH19GTlyJAB79uy57H6vvfZaunTp4nru7+9PQkICR48evex7LRYLEydObLCtf//+Dd67Zs0aQkJCzptU/LOf/eyy+7+Qffv2kZ2dTWpqqms0CiA4OJh/+7d/Y8OGDZSXlwNwww03sGjRIp577jk2bNhAdXV1g3316NGDsLAwnnjiCV5//XV2797dpJ5EpCGFGBFpICYm5rxtpaWl3HjjjWzcuJHnnnuO1atXk5GRwYcffghARUXFZfcbERFx3jar1XpF7w0MDMTf3/+891ZWVrqenzp1iujo6PPee6FtV+LsqaAL/XnExsZSV1dHYWEhUD9faPr06bz11lskJycTHh7Oz3/+c3JzcwGw2WysWbOGa6+9lqeffpp+/foRGxvLM888c17gEZErpzkxItLAhe7xsnLlSrKzs1m9erVr9AWgqKioFTu7tIiICDZt2nTe9rNBoin7g/o5QufKzs7Gy8uLsLAwACIjI/nzn//Mn//8Z44dO8bHH3/Mk08+SX5+Punp6QAkJSWxZMkSDMNg+/btLFq0iP/8z/8kICCAJ598skk9irR3GokRkcs6G2ysVmuD7W+88YYZ7VzQyJEjKSkpYfny5Q22L1mypEn769WrF506deK9997DMAzX9rKyMv75z3+6rlg6V5cuXXj44YcZO3YsW7ZsOe91i8XCgAEDWLBgAR06dLhgjYhcGY3EiMhlDRs2jLCwMB588EGeeeYZfH19Wbx4Mdu2bTO7NZfp06ezYMEC7rnnHp577jl69OjB8uXL+eKLLwAazGu5El5eXsyfP5+7776bCRMm8MADD+B0OvnTn/5EUVERzz//PAAOh4Obb76ZadOm0bt3b0JCQsjIyCA9PZ0777wTgE8//ZRX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nS9z9VdLU4gRERGRC/Lz8aJjiJWOIVazW7kgXaMlIiIibkkhRkRERNySQoyIiIi4JYUYERERcUsKMSIiIuKWFGJERETELSnEiIiIiFtSiBERERG3pBAjIiIibkkhRkRERNySQoyIiIi4JYUYERERcUsKMSIiIuKWPHYVa8MwACguLja5ExEREblSZ39un/05fikeG2JKSkoAiIuLM7kTERERaaySkhJsNtslayzGlUQdN1RXV0d2djYhISFYLJZm3XdxcTFxcXFkZWURGhrarPtui3S8nk3H69l0vJ7P047ZMAxKSkqIjY3Fy+vSs148diTGy8uLzp07t+hnhIaGesR/MFdKx+vZdLyeTcfr+TzpmC83AnOWJvaKiIiIW1KIEREREbekENMEVquVZ555BqvVanYrrULH69l0vJ5Nx+v52uMxn+WxE3tFRETEs2kkRkRERNySQoyIiIi4JYUYERERcUsKMSIiIuKWFGJERETELSnENNKrr75KfHw8/v7+DBo0iG+//dbsllrEvHnzuP766wkJCSEqKoopU6awb98+s9tqNfPmzcNisZCWlmZ2Ky3qxIkT3HPPPURERBAYGMi1117L5s2bzW6rRdTU1PDb3/6W+Ph4AgIC6N69O//5n/9JXV2d2a01i2+++YaJEycSGxuLxWJh2bJlDV43DINnn32W2NhYAgICGDVqFLt27TKn2WZwqeOtrq7miSeeICkpiaCgIGJjY/n5z39Odna2eQ1fpcv9/f7YAw88gMVi4c9//nOr9WcWhZhG+OCDD0hLS+M//uM/2Lp1KzfeeCPjx4/n2LFjZrfW7NasWcNDDz3Ehg0bWLFiBTU1NaSkpFBWVmZ2ay0uIyODN998k/79+5vdSosqLCxk+PDh+Pr6snz5cnbv3s2LL75Ihw4dzG6tRbzwwgu8/vrrLFy4kD179jB//nz+9Kc/8X//7/81u7VmUVZWxoABA1i4cOEFX58/fz4vvfQSCxcuJCMjA7vdztixY12L5bqbSx1veXk5W7Zs4f/8n//Dli1b+PDDD9m/fz+TJk0yodPmcbm/37OWLVvGxo0biY2NbaXOTGbIFbvhhhuMBx98sMG23r17G08++aRJHbWe/Px8AzDWrFljdistqqSkxOjZs6exYsUKY+TIkcajjz5qdkst5oknnjBGjBhhdhut5vbbbzfuu+++BtvuvPNO45577jGpo5YDGEuXLnU9r6urM+x2u/H888+7tlVWVho2m814/fXXTeiweZ17vBeyadMmAzCOHj3aOk21oIsd7/Hjx41OnToZO3fuNLp27WosWLCg1XtrbRqJuUJVVVVs3ryZlJSUBttTUlJYt26dSV21HofDAUB4eLjJnbSshx56iNtvv50xY8aY3UqL+/jjjxk8eDD//u//TlRUFAMHDuSvf/2r2W21mBEjRvD111+zf/9+ALZt28batWu57bbbTO6s5R0+fJjc3NwG319Wq5WRI0e2i+8vqP8Os1gsHjvSWFdXR2pqKr/5zW/o16+f2e20Go9dxbq5nTx5ktraWqKjoxtsj46OJjc316SuWodhGDz22GOMGDGCxMREs9tpMUuWLGHLli1kZGSY3UqrOHToEK+99hqPPfYYTz/9NJs2beKRRx7BarXy85//3Oz2mt0TTzyBw+Ggd+/eeHt7U1tbyx//+Ed+9rOfmd1aizv7HXWh76+jR4+a0VKrqqys5Mknn2TatGkes8rzuV544QV8fHx45JFHzG6lVSnENJLFYmnw3DCM87Z5mocffpjt27ezdu1as1tpMVlZWTz66KN8+eWX+Pv7m91Oq6irq2Pw4MHMnTsXgIEDB7Jr1y5ee+01jwwxH3zwAe+++y7vvfce/fr1IzMzk7S0NGJjY5k+fbrZ7bWK9vj9VV1dzU9/+lPq6up49dVXzW6nRWzevJm//OUvbNmyxeP/Ps+l00lXKDIyEm9v7/NGXfLz88/7140nmTVrFh9//DGrVq2ic+fOZrfTYjZv3kx+fj6DBg3Cx8cHHx8f1qxZw8svv4yPjw+1tbVmt9jsYmJi6Nu3b4Ntffr08ciJ6gC/+c1vePLJJ/npT39KUlISqamp/PrXv2bevHlmt9bi7HY7QLv7/qqurmbq1KkcPnyYFStWeOwozLfffkt+fj5dunRxfX8dPXqU2bNn061bN7Pba1EKMVfIz8+PQYMGsWLFigbbV6xYwbBhw0zqquUYhsHDDz/Mhx9+yMqVK4mPjze7pRZ1yy23sGPHDjIzM12PwYMHc/fdd5OZmYm3t7fZLTa74cOHn3fZ/P79++natatJHbWs8vJyvLwafuV5e3t7zCXWlxIfH4/dbm/w/VVVVcWaNWs88vsLfggwBw4c4KuvviIiIsLsllpMamoq27dvb/D9FRsby29+8xu++OILs9trUTqd1AiPPfYYqampDB48mOTkZN58802OHTvGgw8+aHZrze6hhx7ivffe46OPPiIkJMT1LzibzUZAQIDJ3TW/kJCQ8+b7BAUFERER4bHzgH79618zbNgw5s6dy9SpU9m0aRNvvvkmb775ptmttYiJEyfyxz/+kS5dutCvXz+2bt3KSy+9xH333Wd2a82itLSUgwcPup4fPnyYzMxMwsPD6dKlC2lpacydO5eePXvSs2dP5s6dS2BgINOmTTOx66a71PHGxsbyk5/8hC1btvDpp59SW1vr+g4LDw/Hz8/PrLab7HJ/v+eGNF9fX+x2O7169WrtVluXuRdHuZ9XXnnF6Nq1q+Hn52dcd911HnvJMXDBx9tvv212a63G0y+xNgzD+OSTT4zExETDarUavXv3Nt58802zW2oxxcXFxqOPPmp06dLF8Pf3N7p37278x3/8h+F0Os1urVmsWrXqgv/PTp8+3TCM+susn3nmGcNutxtWq9W46aabjB07dpjb9FW41PEePnz4ot9hq1atMrv1Jrnc3++52ssl1hbDMIxWyksiIiIizUZzYkRERMQtKcSIiIiIW1KIEREREbekECMiIiJuSSFGRERE3JJCjIiIiLglhRgRERFxSwoxIiIi4pYUYkRERMQtKcSIiIiIW1KIEREREbf0/wMmdmNlDmwoKgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(losses)\n", "plt.title(\"Training loss\");" @@ -726,9 +952,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGdCAYAAADuR1K7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLIElEQVR4nO3deXhTZd4+8PtkbdIl3egGbWkFClhQaRXZBselCAwzuIE4sriNvMPIUkVExo0fQxV3RXBQcXnHBRd00BfFugGKIpRFZGlZCi2QtLSlTbqmSc7vj9OG7kua5LTp/bmuXMl5cpJ8A9jePudZBFEURRARERH5CIXcBRARERG5E8MNERER+RSGGyIiIvIpDDdERETkUxhuiIiIyKcw3BAREZFPYbghIiIin8JwQ0RERD5FJXcB3uZwOHD27FkEBgZCEAS5yyEiIqIOEEURFosFMTExUCja7pvpdeHm7NmziI2NlbsMIiIickF+fj769evX5jm9LtwEBgYCkP5wgoKCZK6GiIiIOsJsNiM2Ntb5e7wtvS7c1F+KCgoKYrghIiLqYToypIQDiomIiMinMNwQERGRT2G4ISIiIp/S68bcdIQoirDZbLDb7XKX0iMplUqoVCpOtSciIlkw3DRhtVphNBpRWVkpdyk9ml6vR3R0NDQajdylEBFRL8Nw04DD4UBubi6USiViYmKg0WjY+9BJoijCarXi3LlzyM3NxcCBA9tdbImIiMidGG4asFqtcDgciI2NhV6vl7ucHkun00GtVuPUqVOwWq3w8/OTuyQiIupF+L/ULWBPQ9fxz5CIiOTC30BERETkUxhuiIiIyKcw3FAz/fv3xwsvvCB3GURERC7hgGIfcdVVV+HSSy91SyjZtWsX/P39u14UERGRDBhueglRFGG326FStf9X3qdPHy9URERE5Bm8LNUOURRRabXJchNFsUM1zpkzB1u3bsWLL74IQRAgCALeeustCIKALVu2IDU1FVqtFtu3b8fx48fxl7/8BZGRkQgICMDll1+Ob775ptH7Nb0sJQgCXn/9ddxwww3Q6/UYOHAgNm3a5M4/ZiIiIrdhz007qmrtGProFlk++9DyCdBr2v8revHFF5GTk4Pk5GQsX74cAHDw4EEAwIMPPohnnnkGiYmJCA4OxunTpzFp0iSsWLECfn5+ePvttzFlyhRkZ2cjLi6u1c944oknsGrVKjz99NN4+eWX8de//hWnTp1CaGioe74sERGRm7DnxgcYDAZoNBro9XpERUUhKioKSqUSALB8+XJcd911uOiiixAWFoZLLrkE9957L4YNG4aBAwdixYoVSExMbLcnZs6cOZgxYwYGDBiAlStXoqKiAr/++qs3vh4REVGnsOemHTq1EoeWT5Dts7sqNTW10XFFRQWeeOIJfPHFFzh79ixsNhuqqqqQl5fX5vsMHz7c+djf3x+BgYEoLCzscn1ERETuxnDTDkEQOnRpqLtqOutp8eLF2LJlC5555hkMGDAAOp0ON998M6xWa5vvo1arGx0LggCHw+H2eomIiLqq5/7WpkY0Gg3sdnu7523fvh1z5szBDTfcAAAoLy/HyZMnPVwdERGR93DMjY/o378/du7ciZMnT6KoqKjVXpUBAwZg48aN2LdvH/bv34/bbruNPTBERORTGG58xAMPPAClUomhQ4eiT58+rY6hef755xESEoLRo0djypQpmDBhAkaMGOHlaomIiDxHEDu6mIqPMJvNMBgMKCsrQ1BQUKPnqqurkZubi4SEBPj5+clUoW/gnyUREblTW7+/m2LPDREREfkUhhsiIiLyKQw3RERE5FMYboiIiMinyBputm3bhilTpiAmJgaCIOCzzz5r9zVbt25FSkoK/Pz8kJiYiFdffdXzhRIREVGPIWu4qaiowCWXXILVq1d36Pzc3FxMmjQJ48aNw969e/Hwww9j/vz5+OSTTzxcKREREfUUsq5QPHHiREycOLHD57/66quIi4vDCy+8AAAYMmQIdu/ejWeeeQY33XSTh6okIiKinqRHjbn5+eefkZaW1qhtwoQJ2L17N2pra1t8TU1NDcxmc6MbERER+a4eFW5MJhMiIyMbtUVGRsJms6GoqKjF12RkZMBgMDhvsbGx3iiViIiIZNKjwg0g7UbdUP0Cy03b6y1duhRlZWXOW35+vsdrlMNVV12FhQsXuu395syZg6lTp7rt/YiIiLylR+0KHhUVBZPJ1KitsLAQKpUKYWFhLb5Gq9VCq9V6ozwiIiLqBnpUz82oUaOQmZnZqO3rr79Gamoq1Gq1TFXJb86cOdi6dStefPFFCIIAQRBw8uRJHDp0CJMmTUJAQAAiIyMxc+bMRpfvPv74YwwbNgw6nQ5hYWG49tprUVFRgccffxxvv/02/vvf/zrf74cffpDvCxIREXWCrD035eXlOHbsmPM4NzcX+/btQ2hoKOLi4rB06VKcOXMG77zzDgBg7ty5WL16NdLT03HPPffg559/xhtvvIH333/fc0WKIlBb6bn3b4taD7Ryua2hF198ETk5OUhOTsby5csBAHa7HePHj8c999yD5557DlVVVViyZAmmTZuG7777DkajETNmzMCqVatwww03wGKxYPv27RBFEQ888AAOHz4Ms9mMN998EwAQGhrq0a9KRETkLrKGm927d+OPf/yj8zg9PR0AMHv2bLz11lswGo3Iy8tzPp+QkIDNmzdj0aJFeOWVVxATE4OXXnrJs9PAayuBlTGee/+2PHwW0Pi3e5rBYIBGo4Fer0dUVBQA4NFHH8WIESOwcuVK53nr169HbGwscnJyUF5eDpvNhhtvvBHx8fEAgGHDhjnP1el0qKmpcb4fERFRTyFruLnqqqucA4Jb8tZbbzVrGz9+PPbs2ePBqnxDVlYWvv/+ewQEBDR77vjx40hLS8M111yDYcOGYcKECUhLS8PNN9+MkJAQGaolIiJynx41oFgWar3UgyLXZ7vI4XBgypQpeOqpp5o9Fx0dDaVSiczMTOzYsQNff/01Xn75ZSxbtgw7d+5EQkJCV6omIiKSFcNNewShQ5eG5KbRaGC3253HI0aMwCeffIL+/ftDpWr5r1kQBIwZMwZjxozBo48+ivj4eHz66adIT09v9n5ERNTzORwirHYHamwO1NjssNqkx43vm7ZfOK7p4HkGnRprb0+R7Xsy3PiI/v37Y+fOnTh58iQCAgIwb948vPbaa5gxYwYWL16M8PBwHDt2DB988AFee+017N69G99++y3S0tIQERGBnTt34ty5cxgyZIjz/bZs2YLs7GyEhYXBYDD06hlpRETeJIoiamwOlNfYUFFjq7u3N3gs3V94LD3nfN4qnV9da28UPmrtrQ8Fcac+gfIuwcJw4yMeeOABzJ49G0OHDkVVVRVyc3Px008/YcmSJZgwYQJqamoQHx+P66+/HgqFAkFBQdi2bRteeOEFmM1mxMfH49lnn3Xu9XXPPffghx9+QGpqKsrLy/H999/jqquukvdLEhH1ALV2B0ora1FaacX5untLtRQ46sNIRY1dCiettFfU2GBzeDaICAKgUSqgVSmgUSmhVdU/VtQ9VjofN75v2t78vACtvPFCENsa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F4GBgc7/6zMYDNDpdDJX516BgYHNxhL5+/sjLCzMZ8cYLVq0CKNHj8bKlSsxbdo0/Prrr1i3bh3WrVsnd2keMWXKFPzrX/9CXFwcLr74YuzduxfPPfcc7rzzTrlLc4vy8nIcO3bMeZybm4t9+/YhNDQUcXFxWLhwIVauXImBAwdi4MCBWLlyJfR6PW677TYZq3ZdW983JiYGN998M/bs2YMvvvgCdrvd+fMrNDQUGo1GrrJd1t7fb9PwplarERUVhaSkJG+X6l3yTtbyHa+88ooYHx8vajQaccSIET49LRpAi7c333xT7tK8wtengouiKH7++edicnKyqNVqxcGDB4vr1q2TuySPMZvN4oIFC8S4uDjRz89PTExMFJctWybW1NTIXZpbfP/99y3+9zp79mxRFKXp4I899pgYFRUlarVa8Q9/+IN44MABeYvugra+b25ubqs/v77//nu5S3dJe3+/TfWWqeCCKIqil3IUERERkcdxzA0RERH5FIYbIiIi8ikMN0RERORTGG6IiIjIpzDcEBERkU9huCEiIiKfwnBDREREPoXhhoiIiHwKww0RERH5FIYbIiIi8ikMN0RERORTGG6IiIjIp/x/Azzf3apUcMsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(accuracies, label='train')\n", "plt.plot(accuracies_test, label='test')\n", @@ -739,9 +976,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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93//Vz169LCpN3/+fD355JNq0aKFPvnkEz3//POaMmVKgetQ8vLydN999+nll19W79699cUXX+jll19WYmKiOnTooD///NPh51fUGKW/50527dpVnTp10sqVKzV8+HC9/fbb6tWrl029p556SjExMbr77ru1cuVKzZkzR3v27FFERIROnjx51XjyO0NXX4MD3Khyc3O1YcMGhYWFFfqtdkhIiNq0aaP169crNzfXof1v27ZNPj4+6tq1q3Xa65VTTgcNGqRy5crpww8/VHx8vL7//nt16NBBZ8+edaitW265RYsWLZIkPf/889b2rjwX21PUGOz1Tb/99psiIiL05Zdf6sUXX9SqVat09913a8yYMRo+fHiBtmbNmqW1a9cqPj5eH3zwgcqVK6eoqCibKUsnTpyQv7+/Xn75Za1du1azZ8+Wu7u7br/9du3fv7/APsePH69Dhw7p3Xff1bvvvqsTJ06oQ4cO1/0lTrdu3TR9+nRJf/d/+ce0W7duhW5TlHP+hQsX1LlzZ508eVKzZ89WYmKi4uPjVbt2bZ07d+6qMX3++edyc3PTnXfeaffx63ktL168qMjISL333nsaOXKk1qxZo+eee04JCQn6n//5H+uHYcMw1LNnT73//vv617/+pRUrVuiOO+5QVFRUkY7rggUL1LVrV+Xl5WnevHn67LPPNHLkSGti9cILL+ihhx6SZDudvLCpVY6+By8/5kuWLNGFCxfUtWtXZWRkWOvkJyIlcW1Hhw4ddPToUf3888+m77vEGCgz+vXrZ5QvX96mLDIy0pBkfP311wXqSzImTZpUoLxOnTpGv379rOtPPfWUUaFCBePo0aM29V577TVDkrFnz56rxhUZGWlERkZa1w8fPmxIMlq2bGnk5uZay+Pj4w1Jxv/8z//YbB8TE2NIMjIyMuzuPy8vz7h06ZKxadMmQ5Lx448/GoZhGLm5uUZgYKBx++2329Q/evSo4eHhYdSpU8datnTpUkOS8fHHH9vU3bFjhyHJmDNnzlWf46RJk4yr/bsUFqNh/P26STLeeOMNm21eeuklQ5LxzTffGIZhGNu2bTMkGa+//rpNvdTUVMPHx8d49tlnbfZ5+fMzDMOYMmWK4ebmZmzcuPGqz+VKw4YNu+pzA/C39PR0Q5Lx6KOPXrVer169DEnGyZMnDcOw//9qGPbPK+XLl7c5P+db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H73wwguaOHGiIiMjtXfvXs2aNUt+fn429aZOnarExERFRERo5MiRatSokf766y8dOXJEq1ev1rx580wdkryWiIgIValSRUOGDNGkSZPk4eGhJUuWFBiyLleunKZMmaKnnnpKDz30kAYOHKizZ89qypQpCgoKsrne49FHH9WSJUvUtWtXjRo1Srfddps8PDx07NgxbdiwQffdd5/uv/9+02PM5+npqddff13nz5/Xrbfeqq1bt2ratGmKiopSu3btJElt27bVk08+qQEDBmjnzp268847Vb58eaWlpembb75R8+bN9fTTTxca09SpUzV16lR9/fXX17zu4ujRo9qxY4ck6ddff5Uk66/W1q1bV2FhYUU+FsA/Sdu2bRUfH6+YmBi1a9dOw4cPV+3atZWSkqLZs2fru+++U3x8vCIiIqzb9OrVSxMnTtSjjz6qZ555Rn/99ZfefPNNu3eTat68uTZu3KjPPvtMQUFBqlixos2XHzt37lR0dLQefvhhpaamasKECapZs6bNXQL79OmjJ554QkOHDtWDDz6oo0eP6pVXXinw+wH169eXj4+PlixZoiZNmqhChQoKDg6+5hdKRYmhMKNHj9bixYvVrVs3TZ06VXXq1NEXX3yhOXPm6Omnn1bDhg1t6ru5ualz586KjY1VXl6eZsyYoczMTJsfTOvevbsSEhLUuHFjtWjRQklJSXr11VcL7bdOnTql+++/X4MHD1ZGRoYmTZokb29vm4SwuJo1aybp7zsZVqxYUd7e3goNDbU7KlLUc/7nn3+uOXPmqGfPnqpXr54Mw9Ann3yis2fPqnPnzleNp0OHDlq4cKF++eWXAsdWur7XMiYmRh9//LHuvPNOjR49Wi1atFBeXp5SUlL05Zdf6l//+pduv/12denSRXfeeaeeffZZXbhwQWFhYfr222/1/vvvX7ONChUq6PXXX1d0dLTuvvtuDR48WAEBATp48KB+/PFH6w9W5idiM2bMsI4atmjRwu5UaEffg0Vx9OhR1a9fX/369SvSdRf5/W1+4rBz507rSFz+na/ybd++/ap3/CqVXHIZOYqlsLtF3XzzzXbrZ2VlGc8++6wREhJi+Pj4GJGRkUZycrLdO4n89ttvxsiRI43Q0FDDw8PDqFq1qtGmTRtjwoQJxvnz568aV2F3i3r11Vdt6uXfqeOjjz6yKc+/O8Tld5zY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BckFAAAAAFOQXAAAAAAwBckFAAAAro/F4tylFKtbt67i4+Ot6xaLRStXrryufZqxD2cp1i90AwAAALi2tLQ0ValSpUh1J0+erJUrVyo5ObnY+3A1kgsAAADgMtnZ2fL09DRlX4GBgaViH87CtCgAAADc0Dp06KDhw4dr+PDhqly5svz9/fX888/LMAxJf09lmjZtmvr37y8/Pz8NHjxYkrR161bdeeed8vHxUUhIiEaOHKkLFy5Y93vq1Cn16NFDPj4+Cg0N1ZIlSwq0feWUpmPHjunRRx9V1apVVb58eYWFhem7775TQkKCpkyZoh9//FEWi0UWi0UJCQl297F7927ddddd8vHxkb+/v5588kmdP3/e+nj//v3Vs2dPvfbaawoKCpK/v7+GDRumS5cumXhU7WPkoozYuHGjq0Mo1HvvvefqEMqcK4c7S5OYmBhXhwAAgOnee+89DRo0SN9995127typJ598UnXq1LEmEq+++qpeeOEFPf/885L+/gB/zz336MUXX9SCBQv022+/WROURYsWSfr7Q3xqaqrWr18vT09PjRw5UqdOnSo0hvPnzysyMlI1a9bUqlWrFBgYqB9++EF5eXnq1auXfv75Z61du1ZfffWVJMnPz6/APi5evKh7771Xd9xxh3bs2KFTp04pOjpaw4cPtyYjkrRhwwYFBQVpw4YNOnjwoHr16qVWrVpZn29JIbkAAADADS8kJET//ve/ZbFY1KhRI+3evVv//ve/rR+277rrLo0ZM8Zav2/fvurdu7f1S7cGDRrozTffVGRkpObOnauUlBStWbNG27dv1+233y5JWrBggZo0aVJoDB9++KF+++037dixQ1WrVpUk3XTTTdbHK1SoIHd396tOg1qyZIn+/PNPLV68WOXLl5ckzZo1Sz169NCMGTMUEBAgSapSpYpmzZolNzc3NW7cWN26ddPXX39d4skF06IAAABww7vjjjtkuexOU+Hh4Tpw4IByc3MlSWFhYTb1k5KSlJCQoAoVKliXe+65R3l5eTp8+LD27dsnd3d3m+0aN26sypUrFxpDcnKyWrdubU0simPfvn1q2bKlNbGQpLZt2yovL0/79++3lt18881yc3OzrgcFBV11VMUsjFwAAADgH+/yD+uSlJeXp6eeekojR44sULd27drWD/IWB26N6+Pjc31BSjIMo9A2Ly/38PAo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cSxfvtyoV6+e4enpaQQGBhrDhg0zzp4969QYrsViGIbh7IQGAAAAwI2nzF1zAQAAAKB0IrkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAgP/PYrFo5cqVRa6/ceNGWSwWnT171tQ46tatq/j4eFP3CTgDyQUAALih9e/fXxaLRRaLRR4eHgoICFDnzp21cOFC5eXl2dRNS0tTVFRUkfcdERGhtLQ0+fn5SZISEhJUuXJlM8MHyhSSCwAAcMO79957lZaWpiNHjmjNmjXq2LGjRo0ape7duysnJ8daLzAwUF5eXkXer6enpwIDA2WxWEoibKDMIbkAAAA3PC8vLwUGBqpmzZq65ZZbNH78eH366adas2aNEhISrPWunBa1detWtWrVSt7e3goLC9PKlStlsViUnJwsyXZa1MaNGzVgwABlZGRYR0omT55caEyrVq1SWFiYvL29Va1aNT3wwAOF1p05c6aaN2+u8uXLKyQkREOHDtX58+etjx89elQ9evRQlSpVVL58ed18881avXq1JOmPP/7Q448/rurVq8vHx0cNGjTQokWLinUcgWtxd3UAAAAArnDXXXepZcuW+uSTTxQdHV3g8XPnzqlHjx7q2rWrPvzwQx09elQxMTGF7i8iIkLx8fGaOHGi9u/fL0mqUKGC3bpffPGFHnjgAU2YMEHvv/++srOz9cUXXxS673LlyunNN99U3bp1dfjwYQ0dOlTPPvus5syZI0kaNmyYsrOztXnzZpUvX1579+61tv3CCy9o7969WrNmjapVq6aDBw/qzz//LOphAhxCcgEAAP6xGjdurJ9++snuY0uWLJHFYtE777wjb29vNW3aVMePH9fgwYPt1vf09JSfn58sFosCAwOv2u5LL72kRx99VFOmTLGWtWzZstD6lyc1oaGhevHFF/X0009bk4uUlBQ9+OCDat68uSSpXr161vopKSlq3bq1wsLCJP19sThQUpgWBQAA/rEMwyj0eon9+/erRYsW8vb2tpbddtttprSbnJysTp06Fbn+hg0b1LlzZ9WsWVMVK1ZU3759debMGV24cEGSNHLkSE2bNk1t27bVpEmTbBKmp59+WsuWLVOrVq307LPPauvWraY8B8AekgsAAPCPtW/fPoWGhtp9zF7iYRiGKe36+PgUue7Ro0fVtWtXNWvWTB9//LGSkpI0e/ZsSdKlS5ckSdHR0Tp06JD69Omj3bt3KywsTG+99ZYkKSoqyjql68SJE+rUqZPGjBljyvMArkRyAQAA/pHWr1+v3bt368EHH7T7eP6UqaysLGvZzp07r7pPT09P5ebmXrPtFi1a6Ouvvy5SnDt37lROTo5ef/113XHHHWrYsKFOnDhRoF5ISIiGDBmiTz75RP/617/0zjvvWB+rXr26+vfvrw8++EDx8fGaP39+kdoGHEVyAQAAbnhZWVlKT0/X8ePH9cMPP2j69Om677771L17d/Xt29fuNr1791ZeXp6efPJJ7du3T+vWrdNrr70mSYVOpapbt67Onz+vr7/+WqdPn9bFixft1ps0aZKWLl2qSZMmad++fdq9e7deeeUVu3Xr16+vnJwcvfXWWzp06JDef/99zZs3z6ZOTEyM1q1bp8OHD+uHH37Q+vXr1aRJE0nSxIkT9emnn+rgwYPas2ePPv/8c+tjgNlILgAAwA1v7dq1CgoKUt26dXXvvfdqw4YNevPNN/Xpp5/Kzc3N7jaVKlXSZ599puTkZLVq1UoTJkzQxIkTJcnmOozLRUREaMiQIerVq5eqV69eaMLQoUMHffTRR1q1apVatWqlu+66S999953duq1atdLMmTM1Y8YMNWvWTEuWLFFcXJxNndzcXA0bNkxNmjTRvffeq0aNGlkv9vb09NS4cePUokUL3XnnnXJzc9OyZcuKdNwAR1kMsyYPAgAA3OCWLFli/S0LR66bAP4puBUtAABAIRYvXqx69eqpZs2a+vHHH/Xcc8/pkUceIbEACkFyAQAAUIj09HRNnDhR6enpCgoK0sMPP6yXXnrJ1WEBpRbTogAAAACYggu6AQAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKf4fRhO6xKYThu8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(model, sample_idx=4)" ] @@ -763,9 +1011,33 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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Oa7Zs2fr66+/1uzZs/Xuu+/qv//9r3r06KFBgwbp119/1cKFC/XKK6/oiy++UFRUlN22R44cUdeuXbVgwQKtX79e0dHR+n//7/+pR48edvXmz5+vp556Si1atNDKlSv1wgsvaPLkyXmeQ8nJydF9992n6dOnq3fv3vrss880ffp0JSQkKCIiQn/88YfTx1fYGKW/xk527dpVnTp10urVqzVs2DC9/fbb6tWrl129p59+WtHR0br77ru1evVqzZkzRwcOHFB4eLjOnDlTYDy5nWFhn8H5+eefVaVKFXl6eqpevXoaP358kc4D8E+RnZ2tTZs2KTQ0NN9vtYOCgtSmTRtt3LjR7kNCYezYsUM+Pj7q2rWrduzYoR07duQZdjpo0CCVKVNGS5cuVVxcnL755htFRETo/PnzTrV1yy23aNGiRZKkF154wdbe1ddiRwobg6O+6ddff1V4eLg+//xzvfTSS1qzZo3uvvtujR492uFQslmzZmn9+vWKi4vTBx98oDJlyigyMtJu2PDp06dVtWpVTZ8+XevXr9fs2bPl6emp22+/XYcPH86zz3Hjxuno0aN699139e677+r06dOKiIi47i9xunXrpmnTpkn6q//LPafdunXLd5vCXPMvXbqkzp0768yZM5o9e7YSEhIUFxen2rVr68KFCwXG9Omnn8rDw0N33nmnw79fz2t5+fJldejQQe+9955GjBihdevW6fnnn1d8fLz+53/+x/Zh2DAM9ezZU++//77+9a9/adWqVbrjjjsUGRlZqPO6YMECde3aVTk5OZo3b54++eQTjRgxwpZYvfjii3rooYckyXbOCxpa5ex78O/nfMmSJbp06ZK6du2qtLQ0W53cRORaz3ZkZmZKkqxWa56/Wa1WXb58WT///LNdeUREhE6cOKEffvihwH2XKAZKjX79+hnly5e3K+vQoYMhyfjyyy/z1JdkTJw4MU95cHCw0a9fP9v6008/bVSoUME4ceKEXb3XXnvNkGQcOHCgwLg6dOhgdOjQwbZ+7NgxQ5LRsmVLIzs721YeFxdnSDL+53/+x2776OhoQ5KRlpbmcP85OTnGlStXjC1bthiSjO+++84wDMPIzs42/P39jdtvv92u/okTJ4yyZcsawcHBtrJly5YZkoyPPvrIru7u3bsNScacOXMKPMaJEycaBf13yS9Gw/jrdZNkvPHGG3bbvPzyy4Yk46uvvjIMwzB27NhhSDJef/11u3onT540fHx8jOeee85un38/PsMwjMmTJxseHh7G5s2bCzwWwzCM8ePHG3PmzDE2btxofPbZZ8awYcMMT09P484777R7zQD8n5SUFEOS8eijjxZYr1evXoYk48yZM4ZhOP7/ahiOryvly5e3uz7nWrRokSHJuP/+++3Kv/76a0OSMXXqVFvZ1df4XFdfq3Ovf4sWLSrweIoSQ35905gxYwxJxq5du+zKn3nmGcNisRiHDx82DOP/+pHAwEDjjz/+sNVLT083qlSpYtx99935xpmVlWVkZmYa9evXN0aNGmUr37RpkyHJuOWWW4ycnBxb+fHjx42yZcsaUVFRtjJHr83V588w8vazH374oSHJ2LRpU564rn4fFPaav2fPHkOSsXr16nyPOT+RkZFGo0aN8pSb8VrGxsYaZcqUMXbv3m1X/p///MeQZKxdu9YwDMNYt25dgX3g389fblzHjh0zDMMwLly4YFSqVMlo166d3Wt2taFDh+bbR1/9/8HZ92Dz5s2NrKwsW71vvvnGkGQsW7bMVnb8+HHDw8PDGDhwYL4xGsZfn1uqVKlidOrUya78999/NypWrGhIMrZv3273tyNHjhiSjLlz5xa475KEOxc3gJtuukl33XVXkbf/9NNP1bFjRwUGBiorK8u25H6rsGXLliLtt2vXripT5v/eYo0bN5akPN/i5JYnJSXZyo4eParevXvL399fHh4eKlu2rDp06CBJOnTokCTp8OHDSklJ0SOPPGK3v9q1a+cZ6/zpp5+qcuXK6tGjh90xtmrVSv7+/kWacaswMf7d448/brfeu3dvSdKmTZtsMVosFj3xxBN2Mfr7+6tly5bXjHHChAnKysqyxVCQqVOn6plnnlHHjh3VtWtXvfXWW5o+fbq2bt2qjz/+uDCHDyAfxv9+Y1vUGeYKcvV1JDw8XMHBwbbriCsUNgZHfdPGjRvVpEkT3XbbbXbl/fv3l2EYeSYseeCBB+Tt7W1br1ixonr06KGtW7fa7gxlZWVp2rRpatKkiby8vOTp6SkvLy8dOXLE4bW4d+/eeYakhIeHu/QcSoW/5t9888266aab9Pzzz2vevHk6ePBgods4ffq0atSoke/fr+e1/PTTT9WsWTO1atXKLv577rnH7i567r7y6wMLsn37dqWnp2vI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kpKSGAIFwG2ceqDby8tLbdq0UUJCgl15QkKCwsPDTQ0MAIB/gjp16mjXrl06fvy4zp49a7sDcbW77rpLe/bs0eLFi3XkyBFNnDjRLtmoWLGiRo8erVGjRum9997Tzz//rH379mn27Nl67733XHU4AP7hnB4WFRMToz59+ig0NFRhYWGaP3++kpKSNHjw4OKIDwCA61LSf0Bs9OjR6tevn5o0aaI//vhDixYtcljvnnvu0YsvvqjnnntOf/75pwYOHKi+fftq//79tjovvfSSatSoodjYWB09elSVK1fWLbfconHjxrnqcAD8wzmdXPTq1Uvnzp3TlClTlJycrGbNmmnt2rUKDg4ujvgAALihNWjQQDt27LAr69+/v8O6kydPLnCSFIvFohEjRmjEiBFmhggAhVakB7qHDBmiIUOGmB0LAAAAgFLM6R/RAwAAAABHSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgBwY7NYXLeUcHXq1FFcXJxt3WKxaPXq1de1TzP2AeDGUaRf6AYAAKVfcnKybrrppkLVnTRpklavXq3ExMQi7wPAjY/kAgCAUiQzM1NeXl6m7Mvf379E7APAjYNhUQAAuFFERISGDRumYcOGqXLlyqpatapeeOEFGYYh6a+hTFOnTlX//v3l6+urJ598UpK0fft23XnnnfLx8VFQUJBGjBihS5cu2fabmpqqHj16yMfHRyEhIVqyZEmetq8e0vTLL7/o0UcfVZUqVVS+fHmFhoZq165dio+P1+TJk/Xdd9/JYrHIYrEoPj7e4T7279+vu+66Sz4+PqpataqeeuopXbx40fb3/v37q2fPnnrttdcUEBCgqlWraujQobpy5YqJZxWAu3Dn4iqbN292dwgODRgwwN0hlDohISHuDiFf9913n7tDyBdjpwHXe++99zRo0CDt2rVLe/bs0VNPPaXg4GBbIvHqq6/qxRdf1AsvvCDprw/w99xzj1566SUtWLBAv/76qy1BWbRokaS/PsSfPHlSGzdulJeXl0aMGKHU1NR8Y7h48aI6dOigmjVras2aNfL399e3336rnJwc9erVSz/88IPWr1+vL774QpLk6+ubZx+XL1/WvffeqzvuuEO7d+9WamqqoqKiNGzYMFsyIkmbNm1SQECANm3apJ9+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TGvXrlVwcLAkKTk5WUlJSbb6FSpUUEJCgoYPH67Q0FBVrVpVjzzyiKZOnequQwAAFIPr/p0LwzCUkZFhRiwAgFJkyJAhGjJkiMO/xcfH5ylr1KhRnqFUAIAbi1PJxbhx4xQZGamgoCBduHBBy5cv1+bNm7V+/friig8AAABAKeFUcnHmzBn16dNHycnJ8vX1VYsWLbR+/Xp17ty5uOIDAAAAUEo4lVwsWLCguOIAAAAAUMoV+XcuAAAAAODvSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmMLT3QGgcFavXu3uEPIVFxfn7hAc2rx5s7tDyFf//v3dHUK+SvJ5AwAAJRt3LgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgCmuK7mIjY2VxWJRdHS0SeEAAAAAKK2KnFzs3r1b8+fPV4sWLcyMBwAAAEApVaTk4uLFi3r88cf1zjvv6KabbjI7JgAAAAClUJGSi6FDh6pbt266++67r1k3IyND6enpdgsAAACAG4+nsxssX75c3377rXbv3l2o+rGxsZo8ebLTgQEAAAAoXZy6c3Hy5EmNHDlSH3zwgby9vQu1zdixY5WWlmZbTp48WaRAAQAAAJRsTt252Lt3r1JTU9WmTRtbWXZ2trZu3apZs2YpIyNDHh4edttYrVZZrVZzogUAAABQYjmVXHTq1En79++3KxswYIAaNWqk559/Pk9iAQAAAOCfw6nkomLFimrWrJldWfny5VW1atU85QAAAAD+WfiFbgAAAACmcHq2qKtt3rzZhDAAAAAAlHbcuQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAECRzJkzRyEhIfL29labNm20bdu2Qm339ddfy9PTU61atSreAAEALkdyAQBw2ooVKxQdHa3x48dr3759at++vSIjI5WUlFTgdmlpaerbt686derkokgBAK5EcgEAcNrMmTM1aNAgRUVFqXHjxoqLi1NQUJDm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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Your code here" + "# Get the model's predictions on the test set\n", + "y_pred = model.predict(X_test)\n", + "\n", + "# Find the indicies of the samples where the model's prediction was wrong\n", + "wrong_indicies = np.where(y_pred != y_test)[0]\n", + "\n", + "# For each wrong prediction, get the model's confidence in its prediction\n", + "confidences = np.max(model.forward(X_test[wrong_indicies]), axis=1)\n", + "\n", + "# Find the index of the sample where the model was most confident but wrong\n", + "worst_index = wrong_indicies[np.argmax(confidences)]\n", + "\n", + "# Use the `plot_prediction` function to look at the model's prediction on this sample\n", + "plot_prediction(model, sample_idx=worst_index)" ] }, { @@ -787,15 +1059,134 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best test accuracy: 0.9703703703703703\n" + ] + } + ], "source": [ - "# Your code here" + "# Define the hyperparameters to try\n", + "learning_rates = [0.001, 0.01, 0.1]\n", + "hidden_sizes = [10, 50, 100]\n", + "\n", + "# Initialize the best accuracy to 0\n", + "best_accuracy = 0\n", + "\n", + "# For each combination of hyperparameters\n", + "for learning_rate in learning_rates:\n", + " for hidden_size in hidden_sizes:\n", + " # Create an train a new model\n", + " model = NeuralNet(n_features, hidden_size, n_classes)\n", + " for epoch in range(15):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model.train(x, y, learning_rate)\n", + " \n", + " # Calculate the model's accuracy on the test set\n", + " accuracy = model.accuracy(X_test, y_test)\n", + "\n", + " # If this model is better than the previous best model, update the best model and best accuracy\n", + " if accuracy > best_accuracy:\n", + " best_model = model\n", + " best_accuracy = accuracy\n", + "\n", + "# Print\n", + "print(\"Best test accuracy: \", best_accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best test accuracy: 0.10740740740740741\n" + ] + } + ], + "source": [ + "# Define the hyperparameters to try\n", + "learning_rates = [0.01, 0.1, 1]\n", + "hidden_sizes = [1, 10, 100]\n", + "\n", + "# Initialize the best accuracy to 0\n", + "best_accuracy = 0\n", + "\n", + "# For each combination of hyperparameters\n", + "for learning_rate in learning_rates:\n", + " for hidden_size in hidden_sizes:\n", + " # Create an train a new model\n", + " model = NeuralNet(n_features, hidden_size, n_classes)\n", + " for epoch in range(15):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model.train(x, y, learning_rate)\n", + " \n", + " # Calculate the model's accuracy on the test set\n", + " accuracy = model.accuracy(X_test, y_test)\n", + "\n", + " # If this model is better than the previous best model, update the best model and best accuracy\n", + " if accuracy > best_accuracy:\n", + " best_model = model\n", + " best_accuracy = accuracy\n", + "\n", + "# Print\n", + "print(\"Best test accuracy: \", best_accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best test accuracy: 0.9777777777777777\n" + ] + } + ], + "source": [ + "# This is the model with the best test accuracy. \n", + "\n", + "# Define the hyperparameters to try\n", + "learning_rates = [0.01, 0.1, 1]\n", + "hidden_sizes = [50, 100, 200]\n", + "\n", + "# Initialize the best accuracy to 0\n", + "best_accuracy = 0\n", + "\n", + "# For each combination of hyperparameters\n", + "for learning_rate in learning_rates:\n", + " for hidden_size in hidden_sizes:\n", + " # Create an train a new model\n", + " model = NeuralNet(n_features, hidden_size, n_classes)\n", + " for epoch in range(15):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model.train(x, y, learning_rate)\n", + " \n", + " # Calculate the model's accuracy on the test set\n", + " accuracy = model.accuracy(X_test, y_test)\n", + "\n", + " # If this model is better than the previous best model, update the best model and best accuracy\n", + " if accuracy > best_accuracy:\n", + " best_model = model\n", + " best_accuracy = accuracy\n", + "\n", + "# Print\n", + "print(\"Best test accuracy: \", best_accuracy)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -809,7 +1200,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/02_activities/assignments/assignment_1.ipynb b/02_activities/assignments/assignment_1.ipynb index 70bdb302..21afb7dd 100644 --- a/02_activities/assignments/assignment_1.ipynb +++ b/02_activities/assignments/assignment_1.ipynb @@ -1,383 +1,1005 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "ba8ab56f", - "metadata": {}, - "source": [ - "# Advanced Image Classification with ImageNet" - ] - }, - { - "cell_type": "markdown", - "id": "7c630244b8fe2847", - "metadata": { - "collapsed": false - }, - "source": [ - "In this assignment, you will be asked to develop a convolutional neural network (CNN) to classify images from the CIFAR-100 dataset. At each step, you'll be guided through the process of developing a model architecture to solve a problem. Your goal is to create a CNN that attains at least 55% accuracy on the validation set.\n", - "\n", - "### The CIFAR-100 Dataset\n", - "\n", - "The [CIFAR-100 dataset](https://www.cs.toronto.edu/~kriz/cifar.html) consists of 60000 32x32 colour images in 100 classes, with 600 images per class. There are 50000 training images and 10000 test images. The dataset is divided into five training batches and one test batch, each with 10000 images. The test batch contains exactly 1000 randomly-selected images from each class. The training batches contain the remaining images in random order, but some training batches may contain more images from one class than another. Between them, the training batches contain exactly 500 images from each class.\n", - "\n", - "### Tools\n", - "\n", - "You will use Keras with TensorFlow to develop your CNN. For this assignment, it's strongly recommended that you use a GPU to accelerate your training, or else you might find it difficult to train your network in a reasonable amount of time. If you have a computer with a GPU that you wish to use, you can follow the [TensorFlow instructions](https://www.tensorflow.org/install/) for installing TensorFlow with GPU support. Otherwise, you can use [Google Colab](https://colab.research.google.com/) to complete this assignment. Colab provides free access to GPU-enabled machines. If you run into any issues, please contact us as soon as possible so that we can help you resolve them." - ] - }, - { - "cell_type": "markdown", - "id": "fab62988ece1528d", - "metadata": { - "collapsed": false - }, - "source": [ - "## Task 1: Data Exploration and Preprocessing (Complete or Incomplete)\n", - "### 1a: Load and Explore the Dataset\n", - "- Use the code below to download the dataset.\n", - "- Explore the dataset: examine the shape of the training and test sets, the dimensions of the images, and the number of classes. Show a few examples from the training set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8820fcdc5ae52ae2", - "metadata": { - "ExecuteTime": { - "start_time": "2024-01-26T17:04:08.432758Z" - }, - "collapsed": false, - "is_executing": true - }, - "outputs": [ + "cells": [ + { + "cell_type": "markdown", + "id": "ba8ab56f", + "metadata": { + "id": "ba8ab56f" + }, + "source": [ + "# Advanced Image Classification with ImageNet" + ] + }, + { + "cell_type": "markdown", + "id": "7c630244b8fe2847", + "metadata": { + "collapsed": false, + "id": "7c630244b8fe2847" + }, + "source": [ + "In this assignment, you will be asked to develop a convolutional neural network (CNN) to classify images from the CIFAR-100 dataset. At each step, you'll be guided through the process of developing a model architecture to solve a problem. Your goal is to create a CNN that attains at least 55% accuracy on the validation set.\n", + "\n", + "### The CIFAR-100 Dataset\n", + "\n", + "The [CIFAR-100 dataset](https://www.cs.toronto.edu/~kriz/cifar.html) consists of 60000 32x32 colour images in 100 classes, with 600 images per class. There are 50000 training images and 10000 test images. The dataset is divided into five training batches and one test batch, each with 10000 images. The test batch contains exactly 1000 randomly-selected images from each class. The training batches contain the remaining images in random order, but some training batches may contain more images from one class than another. Between them, the training batches contain exactly 500 images from each class.\n", + "\n", + "### Tools\n", + "\n", + "You will use Keras with TensorFlow to develop your CNN. For this assignment, it's strongly recommended that you use a GPU to accelerate your training, or else you might find it difficult to train your network in a reasonable amount of time. If you have a computer with a GPU that you wish to use, you can follow the [TensorFlow instructions](https://www.tensorflow.org/install/) for installing TensorFlow with GPU support. Otherwise, you can use [Google Colab](https://colab.research.google.com/) to complete this assignment. Colab provides free access to GPU-enabled machines. If you run into any issues, please contact us as soon as possible so that we can help you resolve them." + ] + }, + { + "cell_type": "markdown", + "id": "fab62988ece1528d", + "metadata": { + "collapsed": false, + "id": "fab62988ece1528d" + }, + "source": [ + "## Task 1: Data Exploration and Preprocessing (Complete or Incomplete)\n", + "### 1a: Load and Explore the Dataset\n", + "- Use the code below to download the dataset.\n", + "- Explore the dataset: examine the shape of the training and test sets, the dimensions of the images, and the number of classes. Show a few examples from the training set." + ] + }, + { + "cell_type": "code", + "source": [ + "import importlib\n", + "\n", + "def install_if_missing(package):\n", + " if importlib.util.find_spec(package) is None:\n", + " !pip install {package}\n", + "\n", + "for package in [\"tensorflow\", \"matplotlib\", \"numpy\", \"sklearn\", \"pandas\"]:\n", + " install_if_missing(package)" + ], + "metadata": { + "id": "G7pMlt5aKeTs" + }, + "id": "G7pMlt5aKeTs", + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8820fcdc5ae52ae2", + "metadata": { + "ExecuteTime": { + "start_time": "2024-01-26T17:04:08.432758Z" + }, + "is_executing": true, + "id": "8820fcdc5ae52ae2" + }, + "outputs": [], + "source": [ + "from keras.datasets import cifar100\n", + "\n", + "# Load the CIFAR-100 dataset\n", + "(x_train, y_train), (x_test, y_test) = cifar100.load_data(label_mode='fine')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "a386b4072078138f", + "metadata": { + "id": "a386b4072078138f", + "outputId": "8553275f-3d88-417f-8699-dfe9c302ceef", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "X_train shape: (50000, 32, 32, 3)\n", + "y_train shape: (50000, 1)\n", + "X_test shape: (10000, 32, 32, 3)\n", + "y_test shape: (10000, 1)\n" + ] + } + ], + "source": [ + "# Shape of the training and test sets and dimensions of the images\n", + "print(f'X_train shape: {x_train.shape}')\n", + "print(f'y_train shape: {y_train.shape}')\n", + "print(f'X_test shape: {x_test.shape}')\n", + "print(f'y_test shape: {y_test.shape}')" + ] + }, + { + "cell_type": "code", + "source": [ + "# Number of classes\n", + "num_classes = len(set(y_train.flatten()))\n", + "print(f'Number of classes: {num_classes}')" + ], + "metadata": { + "id": "LdwdvgthjOcc", + "outputId": "49464512-c81e-4ad5-d384-483dda5b2146", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "LdwdvgthjOcc", + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of classes: 100\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 9 random examples from the training set\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Selecting 9 random indices\n", + "random_indices = np.random.choice(len(x_train[:,0]), 9, replace=False)\n", + "\n", + "# Creating a 3x3 grid plot\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(x_train[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Label: {y_train[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ], + "metadata": { + "id": "WNVtk9O5efCz", + "outputId": "4a5978fc-c07f-4b4d-ab9c-2c33445c49de", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + } + }, + "id": "WNVtk9O5efCz", + "execution_count": 22, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH4CAYAAACbup4ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADBaElEQVR4nOz9eZwdZZn3j3+q6uynT+9L9k5CFgiEfTOCBJABFDU6COMMCgPjOG6PL3+DjPIdBJ1xe5ARHddHHkARBc0D6CCuAziIkLBDgEDIQjp773367LX8/uj08rnuSro7JJ2TcL158XrlOl3nrruq7rrvU/W5FisIggCKoiiKohxU7IPdAUVRFEVRdEFWFEVRlKpAF2RFURRFqQJ0QVYURVGUKkAXZEVRFEWpAnRBVhRFUZQqQBdkRVEURakCdEFWFEVRlCpAF2RFURRFqQIOywV506ZNsCwLX//61/dbmw8//DAsy8LDDz+8T9+fO3cuLMuCZVn4xCc+sd/6FUZfX9/Ivvb3eVAmj45HHY/VxJt9PD777LM0HleuXHlA9zcZqmZBvv3222FZFp588smD3ZUDxplnnok77rgDl19++R63+fOf/zwyULq6uuhv99xzDy699FLMnz8fqVQKixcvxj//8z+jr6+Ptkun07jjjjvwjW9840AcxpuCN+t47OjowBe+8AWceuqpaGhoQHNzM5YvX44//vGPe2znj3/8I8455xzU1dUhk8ngpJNOwt133z3ydx2Pb5w363gEQIvn2P+/+tWvhrZz99134y1veQvS6TTq6+uxbNkyPPjggyN/b29vxx133IFrr732gB7PvhA52B14MzF//nxcdtlle/y77/v45Cc/iXQ6jVwuZ/z9H//xHzFjxgxcdtllmDNnDl544QV8+9vfxgMPPICnn34ayWQSABCNRnHZZZdh06ZN+PSnP33Ajkc5tAkbj7/85S/xta99DStWrMDll18O13Xx4x//GOeddx5uvfVW/P3f/z1tf9ttt+Gqq67Ceeedhy9/+ctwHAevvPIKOjo6RrbR8ahMhL3Nj+eddx4+9KEP0WcnnHCCsd0NN9yAL37xi7j44otxxRVXoFKpYM2aNdi6devINg0NDbjsssvw8MMP48tf/vL+PYg3iC7IVcT/+T//Bx0dHfiHf/gHfPOb3zT+vnLlSixfvpw+O+mkk3D55ZfjzjvvxD/8wz9MUU+Vw5Wzzz4bmzdvRnNz88hn//RP/4Tjjz8en//852lB3rRpEz7+8Y/jk5/8ZOh4VZT9xaJFi/b6MAMAjz/+OL74xS/ipptuOmR/+FXNK+uJUC6X8fnPfx4nnXQS6urqkE6nceaZZ+Khhx7a43e+8Y1voL29HclkEmeddRbWrFljbLN27VpcfPHFaGxsRCKRwMknn4xf/epX4/Ynn89j7dq1xqvlfaGnpwf/+q//ii9+8Yuor68P3UYuxgDw3ve+FwDw8ssvv+E+KJPjcByPRx99NC3GABCPx/GOd7wDW7ZsQTabHfn8+9//PjzPwxe/+EUAwODgILR43MHjcByPYykUCigWi3v8+80334xp06bhU5/6FIIgwODg4H7Z71RySC3IAwMDuOWWW7B8+XJ87Wtfww033IDOzk6cf/75ePbZZ43tf/zjH+Nb3/oWPv7xj+Nzn/sc1qxZg3POOQc7d+4c2ebFF1/E6aefjpdffhmf/exncdNNNyGdTmPFihW4995799qf1atX46ijjsK3v/3tN3xs1113HaZNm4aPfOQjk/rejh07AMCYRJUDz+E8HiU7duxAKpVCKpUa+eyPf/wjjjzySDzwwAOYNWsWMpkMmpqacN1118H3/f3eB2XvHM7j8fbbb0c6nUYymcSSJUvw05/+1Njmv//7v3HKKafgW9/6FlpaWpDJZDB9+vQDcj8cMIIq4bbbbgsABE888cQet3FdNyiVSvRZb29v0NbWFlx55ZUjn23cuDEAECSTyWDLli0jn69atSoAEHz6058e+ezcc88Nli5dGhSLxZHPfN8Pli1bFixcuHDks4ceeigAEDz00EPGZ9dff/24x9fe3h5cfvnloX977rnnAsdxgt/97ndBEATB9ddfHwAIOjs7x233qquuChzHCV599VXjb8Pn4cYbbxy3HYV5M49Hybp164JEIhF88IMfpM9ra2uDhoaGIB6PB9ddd12wcuXK4G//9m8DAMFnP/tZox0dj/vOm3k8Llu2LLj55puDX/7yl8H3vve94JhjjgkABN/97ndHtunp6QkABE1NTUFNTU1w4403BnfffXdwwQUXBACC73//+0a7w/37xS9+MW7/popDakEei+d5QXd3d9DZ2Rm8853vDI4//viRvw0PuA984APG90477bRg8eLFQRAEQXd3d2BZVvBv//ZvQWdnJ/3/hS98IQAwMmDDBtxk2NuAO+uss4KLLrpoxJ7ognznnXcGAIJrrrkm9O86Ae47b+bxOJZcLhccf/zxQUNDQ7B161b6m23bAYDgq1/9Kn1+wQUXBMlkMhgYGKDPdTzuOzoeRymVSsExxxwT1NfXB/l8PgiCINi8eXMAIAAQ3HXXXXQelixZEsyaNctopxoX5EPqlTUA/OhHP8Kxxx6LRCKBpqYmtLS04Ne//jX6+/uNbRcuXGh8tmjRImzatAkA8NprryEIAlx33XVoaWmh/6+//noAwK5duw7o8dx99934y1/+gptuumlS33vkkUdw1VVX4fzzz8eXvvSlA9Q7ZTwOt/E4Fs/z8Dd/8zd46aWXsHLlSsyYMYP+PuzV/4EPfIA+/8AHPoBCoYBnnnlmyvqqDHE4j8dhYrEYPvGJT6Cvrw9PPfUUAFCEycUXXzyyrW3buPTSS7FlyxZs3rx5yvs6WQ4pL+uf/OQnuOKKK7BixQp85jOfQWtrKxzHwVe+8hWsX79+0u0N61xXX301zj///NBtFixY8Ib6PB6f+cxn8P73vx+xWGzkRhiOK+7o6EC5XDYmwueeew7vfve7ccwxx2DlypWIRA6py3jYcDiOx7F8+MMfxv33348777wT55xzjvH3GTNmYN26dWhra6PPW1tbAQC9vb1T0k9liMN9PI5l9uzZAIacYQGMOJzV19fDcRzadux4nDNnztR2dJIcUjP5ypUrMX/+fNxzzz2wLGvk8+Ffa5J169YZn7366quYO3cugKG4N2DoV9Xb3/72/d/hCdDR0YGf/vSnoU4KJ554Io477jhyyFi/fj0uuOACtLa24oEHHkBNTc0U9lYZy+E4Hof5zGc+g9tuuw0333yz8QQ8zEknnYR169Zh69atI30HgG3btgEAWlpapqSvyhCH83iUbNiwAcDoGLNtG8cffzyeeOIJlMtlxGKxkW0PpfF4SL2yHv7lE4wJrVi1ahUee+yx0O3vu+8+CghfvXo1Vq1ahQsvvBDA0C+n5cuX4wc/+AG2b99ufL+zs3Ov/dkfbv333nuv8f+ll14KYMgLcmx2ox07duCv/uqvYNs2fve73x0SA+xw5nAcjwBw44034utf/zquvfZafOpTn9rjdsPj9P/+3/878pnv+7jtttvQ2NiIk0466Q31Q5kch+N4DNtHNpvFzTffjObmZhpjl156KTzPw49+9KORz4rFIu68804sWbLEeNNYjVTdE/Ktt96K3/72t8bnn/rUp3DRRRfhnnvuwXvf+168853vxMaNG/H9738fS5YsCY05W7BgAc444wx89KMfRalUws0334ympiZcc801I9t85zvfwRlnnIGlS5fiwx/+MObPn4+dO3fisccew5YtW/Dcc8/tsa+rV6/G2Wefjeuvvx433HDDPh3vihUrjM+Gn4gvvPBCCme64IILsGHDBlxzzTX485//jD//+c8jf2tra8N55523T31Q9sybbTzee++9uOaaa7Bw4UIcddRR+MlPfkJ/P++880ZeUb/nPe/Bueeei6985Svo6urCcccdh/vuuw9//vOf8YMf/ADxeHyf+qDsmTfbePzOd76D++67D+9617swZ84cbN++Hbfeeis2b96MO+64g56EP/KRj+CWW27Bxz/+cbz66quYM2cO7rjjDrz++uv4r//6r33a/1RTdQvy9773vdDPr7jiClxxxRXYsWMHfvCDH+B3v/sdlixZgp/85Cf4xS9+EZrU/EMf+hBs28bNN9+MXbt24dRTT8W3v/1tTJ8+fWSbJUuW4Mknn8QXvvAF3H777eju7kZraytOOOEEfP7znz9Qh7lPDA/+//2//7fxt7POOksX5APAm208Do+xdevW4YMf/KDx94ceemhkQbYsC/fddx/+9V//FXfffTduv/12LF68GD/5yU/wd3/3dwe8r29G3mzj8a1vfSv+8pe/4JZbbkF3dzfS6TROPfVU3HrrrYZfQzKZxIMPPohrrrkGt956K3K5HI4//nj8+te/3qMGXnUcTBfvNxPt7e3B3/zN3wSdnZ3B4ODgAd2X7/tBZ2dn8PTTT2uYiRKKjkelmpjK8ei6btDZ2Rncd999Gvb0Zuauu+5CS0sL/uVf/uWA7qe/vx8tLS048cQTD+h+lEMbHY9KNTFV4/GFF15AS0tLqFx4sKm6V9aHK3feeScKhQKAUZf9A0VNTQ3+8Ic/jNiLFi06oPtTDj10PCrVxFSOxwULFtB4PPbYYw/o/iaDFQSaDV5RFEVRDjb6ylpRFEVRqgBdkBVFURSlCtAFWVEURVGqgAk5dfm+j23btiGTyVBKNkUBhjIDZbNZzJgxA7Z94H/j6XhU9oaOR6WamMx4nNCCvG3btgPu+aYc+nR0dGDWrFkH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UC6X8fnPfx4nnXQS6urqkE6nceaZZ+Khhx7a43e+8Y1voL29HclkEmeddRbWrFljbLN27VpcfPHFaGxsRCKRwMknn4xf/epX4/Ynn89j7dq1xiu6yTCwO8tLWxsnNJ8+fShxejI5WrRj5cqVOOWUU0YWYwA48sgjce655+LnP//5PvdB2TcOx/EYxn/9138hm83SpLZmzRr09fXh0ksvpdjbiy66CDU1Nbjrrrv2ax+U8Tkcx+Nk5scwfvrTn2LevHlYtmzZPvdhKjmkFuSBgQHccsstWL58Ob72ta/hhhtuQGdnJ84//3w8++yzxvY//vGP8a1vfQsf//jH8bnPfQ5r1qzBOeecg507Rysgvfjiizj99NPx8ssv47Of/SxuuukmpNNprFixAvfee+9e+7N69WocddRR+Pa3v73Px3TyyScjnU7juuuuw4MPPoitW7fiT3/6E6655hqccsopePvb3w5g6NXN888/j5NPPtlo49RTT8X69esplaRy4Dkcx2MYd955J5LJJN73vveNfFYqDaVCDJsQk8kknnnmGUolqRx4DsfxONH5MYxnnnkGL7/8Mv72b/92n/c/5QRVwm233RYACJ544ok9buO6blAqleiz3t7eoK2tLbjyyitHPtu4cWMAIEgmk8GWLVtGPl+1alUAIPj0pz898tm5554bLF26NCgWiyOf+b4fLFu2LFi4cOHIZw899FAAIHjooYeMz66//vpxj6+9vT24/PLLQ/92//33B9OnTw8wlE04ABCcf/75QTabHdmms7MzABB88YtfNL7/ne98JwAQrF27lj4f7t8vfvGLcfunMG/m8TiW7u7uIBaLBZdccgl93tnZGViWFVx11VX0+dq1a0fGcFdXF/1Nx+O+82YejxOZH8P453/+5wBA8NJLL4X+vRrH4yH1hOw4DmKxoYIVvu+jp6cHruvi5JNPxtNPP21sv2LFCsycOXPEPvXUU3HaaafhgQceAAD09PTgwQcfxCWXXIJsNouuri50dXWhu7sb559/PtatW4etW7fusT/Lly9HEAS44YYb3tBxtbS04IQTTsCXvvQl3HfffbjhhhvwyCOP4O///u9HtikUhhKex+Nx4/vDzjPD2yhTw+E6HseycuVKlMtlQ4Nrbm7GJZdcgh/96Ee46aabsGHDBjzyyCO49NJLEY0OFY3R8Ti1HK7jcSLz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AQBqamoOaF/3B4eUl/VPfvITXHHFFVixYgU+85nPoLW1FY7j4Ctf+QrWr18/6faGNYWrr74a559/fug2CxYseEN9ngwf/vCHcf/99+POO+/EOeecM+HvzZ49G6+88soB7JkyUQ7HMTr8w1A61jiOg6amJvT29h7Q/SsT43Ace7fffjuKxSIuuugi+vzd7343AODRRx/FhRdeCACoq6vDL3/5S2zevBmbNm1Ce3s72tvbsWzZMrS0tFBoaLVySC3IK1euxPz583HPPfeQJ93wrzVJmLPTq6++irlz5wIYinsDhuJ2h50DDhaf+cxncNttt+Hmm2/GBz7wgUl9d8OGDWhpaTlAPVMmw+E4Rk866SQAMF5PlstldHV16dirEg7Hsbdz504EQWBElAx7+bshtdznzJmDOXPmABjKWvjUU0/hr//6rw98Z/cDh9Qr6+HC5MGYAlWrVq3CY489Frr9fffdR5PI6tWrsWrVqpFfVK2trVi+fDl+8IMfYPv27cb3Ozs799qf/eHWDwA33ngjvv71r+Paa6/Fpz71qT1uF9afBx54AE899RQuuOCCN9QHZf9wOI7R5cuXo7W1FXfeeSeKxeLI57fffjs8z8N55523z20r+4/DcewtWrQIQRDg5z//OX3+s5/9DABwwgkn7PX7n/vc5+C67iGTIKnqnpBvvfVW/Pa3vzU+/9SnPoWLLroI99xzD9773vfine98JzZu3Ijvf//7WLJkyYjjyVgWLFiAM844Ax/96EdRKpVw8803o6mpCddcc83INt/5zndwxhlnYOnSpfjwhz+M+fPnY+fOnXjsscewZcsWPPfcc3vs6+rVq3H22Wfj+uuv32fHhXvvvXckLdxRRx2Fn/zkJ/T38847b+RV4bJly3DCCSfg5JNPRl1dHZ5++mnceuutmD17dlWmgTtcebON0Xg8jhtvvBGXX3453va2t+GDH/wgNm/ejG9+85s488wz8b73vW+f2lUmz5tt7F1xxRX4+te/jo985CN45plncPTRR+Ppp5/GLbfcgqOPPhrvfe97R7b96le/ijVr1uC0005DJBLBfffdh9///vf493//d5xyyin7tP8p5yB5dxsMu/Xv6f+Ojo7A9/3gy1/+ctDe3h7E4/HghBNOCO6///7g8ssvD9rb20faGhvuc9NNNwWzZ88O4vF4cOaZZwbPPfecse/1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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "id": "ad49291da3a819ea", + "metadata": { + "collapsed": false, + "id": "ad49291da3a819ea" + }, + "source": [ + "### 1b: Data Preprocessing (4 Marks)\n", + "- With the data downloaded, it's time to preprocess it. Start by normalizing the images so that they all have pixel values in the range [0, 1].\n", + "- Next, convert the labels to one-hot encoded vectors.\n", + "- Finally, split the training set into training and validation sets. Use 80% of the training set for training and the remaining 20% for validation." + ] + }, + { + "cell_type": "code", + "source": [ + "# Normalize the images so that they all have pixel values in the range [0, 1]\n", + "x_train = x_train.astype('float32') / 255\n", + "x_test = x_test.astype('float32') / 255\n", + "\n", + "print(f\"Train set min value: {x_train.min()}, max value: {x_train.max()}\")\n", + "print(f\"Test set min value: {x_test.min()}, max value: {x_test.max()}\")\n" + ], + "metadata": { + "id": "RodPUr--j0Cn", + "outputId": "6a7db323-2ffd-4d4f-c9bb-e9a8eba34bda", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "RodPUr--j0Cn", + "execution_count": 23, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Train set min value: 0.0, max value: 1.0\n", + "Test set min value: 0.0, max value: 1.0\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from keras.utils import to_categorical\n", + "\n", + "print(f'Before one-hot encoding: {y_train[0]}')\n", + "y_train = to_categorical(y_train, num_classes=100)\n", + "y_test = to_categorical(y_test, num_classes=100)\n", + "print(f'After one-hot encoding: {y_train[0]}')" + ], + "metadata": { + "id": "QZyRxcCeLMzY", + "outputId": "dc2a8ccf-a4e1-44d8-880d-17e2857d3a01", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "QZyRxcCeLMzY", + "execution_count": 24, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Before one-hot encoding: [19]\n", + "After one-hot encoding: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0.]\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b18c10172fa72d0c", + "metadata": { + "id": "b18c10172fa72d0c" + }, + "outputs": [], + "source": [ + "# Your code here\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# split training set into training and validation sets\n", + "x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "markdown", + "id": "5993757f08c89db7", + "metadata": { + "collapsed": false, + "id": "5993757f08c89db7" + }, + "source": [ + "## Task 2: Model Development (Complete or Incomplete)\n", + "### Task 2a: Create a Baseline CNN Model\n", + "- Design a CNN architecture. Your architecture should use convolutional layers, max pooling layers, and dense layers. You can use any number of layers, and you can experiment with different numbers of filters, filter sizes, strides, padding, etc. The design doesn't need to be perfect, but it should be unique to you.\n", + "- Print out the model summary." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "c9edafdaf887b8d5", + "metadata": { + "id": "c9edafdaf887b8d5" + }, + "outputs": [], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", + "\n", + "# Your code here\n", + "def my_kernel(shape=(5, 5, 3, 3), dtype=None):\n", + " array = np.zeros(shape=shape, dtype=\"float32\")\n", + " array[:, :, 0, 0] = 1 / 25\n", + " array[:, :, 1, 1] = 1 / 25\n", + " array[:, :, 2, 2] = 1 / 25\n", + " return array\n", + "\n" + ] + }, + { + "cell_type": "code", + "source": [ + "model = Sequential()\n", + "\n", + "# Convolutional Layer 1\n", + "model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Convolutional Layer 2\n", + "model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Convolutional Layer 3\n", + "model.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu', padding='same'))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Flatten the output of the final convolutional layer\n", + "model.add(Flatten())\n", + "\n", + "# Dropout Layer (to reduce overfitting)\n", + "model.add(Dropout(0.5))\n", + "\n", + "# Dense Layer 1\n", + "model.add(Dense(128, activation='relu'))\n", + "\n", + "# Dense Layer 2 (Output Layer)\n", + "model.add(Dense(100, activation='softmax')) # CIFAR-100 has 100 classes\n" + ], + "metadata": { + "id": "06ExGJe32IlW", + "outputId": "4726004a-6cb5-43d5-ac81-716659130542", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "06ExGJe32IlW", + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.10/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "id": "546324c007c73db5", + "metadata": { + "collapsed": false, + "id": "546324c007c73db5" + }, + "source": [ + "### Task 2b: Compile the model\n", + "\n", + "- Select an appropriate loss function and optimizer for your model. These can be ones we have looked at already, or they can be different.\n", + "- Briefly explain your choices (one or two sentences each).\n", + "- Loss function: ______\n", + "- Optimizer: ______" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "ab39f4ba69d684e9", + "metadata": { + "id": "ab39f4ba69d684e9", + "outputId": "e02f2858-421f-4140-9d9c-f55e94fcb5b2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 463 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_3\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_3\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n", + "│ conv2d_9 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_9 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ conv2d_10 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_10 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ conv2d_11 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_11 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ flatten_3 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m262,272\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m12,900\u001b[0m │\n", + "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                          Output Shape                         Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
+              "│ conv2d_9 (Conv2D)                    │ (None, 32, 32, 32)          │             896 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_9 (MaxPooling2D)       │ (None, 16, 16, 32)          │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ conv2d_10 (Conv2D)                   │ (None, 16, 16, 64)          │          18,496 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_10 (MaxPooling2D)      │ (None, 8, 8, 64)            │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ conv2d_11 (Conv2D)                   │ (None, 8, 8, 128)           │          73,856 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_11 (MaxPooling2D)      │ (None, 4, 4, 128)           │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ flatten_3 (Flatten)                  │ (None, 2048)                │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dropout_2 (Dropout)                  │ (None, 2048)                │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dense_4 (Dense)                      │ (None, 128)                 │         262,272 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dense_5 (Dense)                      │ (None, 100)                 │          12,900 │\n",
+              "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m368,420\u001b[0m (1.41 MB)\n" + ], + "text/html": [ + "
 Total params: 368,420 (1.41 MB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m368,420\u001b[0m (1.41 MB)\n" + ], + "text/html": [ + "
 Trainable params: 368,420 (1.41 MB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ], + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ] + }, + "metadata": {} + } + ], + "source": [ + "from keras import optimizers\n", + "# Compile the model\n", + "model.compile(optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "# Print the model summary\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "id": "653fba928413b9f6", + "metadata": { + "collapsed": false, + "id": "653fba928413b9f6" + }, + "source": [ + "## Task 3: Model Training and Evaluation (Complete or Incomplete)\n", + "### Task 3a: Train the Model\n", + "\n", + "- Train your model for an appropriate number of epochs. Explain your choice of the number of epochs used - you can change this number before submitting your assignment.\n", + "- Use a batch size of 32.\n", + "- Use the validation set for validation." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "9de74f274ad08546", + "metadata": { + "id": "9de74f274ad08546", + "outputId": "7362dd63-d6cb-4c65-db25-2486fe855ea2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/5\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.0573 - loss: 4.2384 - val_accuracy: 0.1953 - val_loss: 3.3612\n", + "Epoch 2/5\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.1971 - loss: 3.2952 - val_accuracy: 0.2749 - val_loss: 2.9466\n", + "Epoch 3/5\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - accuracy: 0.2723 - loss: 2.9123 - val_accuracy: 0.3026 - val_loss: 2.7837\n", + "Epoch 4/5\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.3178 - loss: 2.6889 - val_accuracy: 0.3258 - val_loss: 2.6705\n", + "Epoch 5/5\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.3501 - loss: 2.5409 - val_accuracy: 0.3614 - val_loss: 2.5213\n" + ] + } + ], + "source": [ + "# Your code here\n", + "history = model.fit(\n", + " x_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_data=(x_val, y_val), # Validation data\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b48615c26b99d2e9", + "metadata": { + "collapsed": false, + "id": "b48615c26b99d2e9" + }, + "source": [ + "### Task 3b: Accuracy and other relevant metrics on the test set\n", + "\n", + "- Report the accuracy of your model on the test set.\n", + "- While accuracy is a good metric, there are many other ways to numerically evaluate a model. Report at least one other metric, and explain what it measures and how it is calculated.\n", + "\n", + "- Accuracy: ______\n", + "- Other metric: ______\n", + "- Reason for selection: _____\n", + "- Value of metric: ______\n", + "- Interpretation of metric value: ______" + ] + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-01-26 12:04:27.706527: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", - "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" - ] + "cell_type": "code", + "execution_count": 30, + "id": "f670665fda92fb0e", + "metadata": { + "ExecuteTime": { + "end_time": "2024-01-26T17:49:39.016880Z", + "start_time": "2024-01-26T17:49:39.012100Z" + }, + "id": "f670665fda92fb0e", + "outputId": "e134ff79-8bff-4d07-cb3e-c403d9d2ac9f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.3667 - loss: 2.5153\n", + "Loss: 2.51\n", + "Accuracy: 36.57%\n" + ] + } + ], + "source": [ + "# Your code here\n", + "loss, accuracy = model.evaluate(x_test, y_test)\n", + "\n", + "print(f'Loss: {loss:.2f}')\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "markdown", + "id": "58d2d836d4e8ce99", + "metadata": { + "collapsed": false, + "id": "58d2d836d4e8ce99" + }, + "source": [ + "### Task 3c: Visualize the model's learning\n", + "\n", + "- Plot the training accuracy and validation accuracy with respect to epochs.\n", + "- Select an image that the model correctly classified in the test set, and an image that the model incorrectly classified in the test set. Plot the images and report the model's classification probabilities for each.\n", + "- Briefly discuss the results. What do the plots show? Do the results make sense? What do the classification probabilities indicate?" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "c5b214475a496ca5", + "metadata": { + "ExecuteTime": { + "end_time": "2024-01-26T17:50:59.733968Z", + "start_time": "2024-01-26T17:50:59.730635Z" + }, + "id": "c5b214475a496ca5", + "outputId": "1a1c02c1-1d9c-4052-be5e-a8f5a7ac2c6e", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 242 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTEUlEQVR4nO3deXhU5f3+8Xtmsi8zIZA9YYdAgKAiYEAWkYBgUfvVupQKVuoKCrRWxWpxqaKlClgt4orVH6WConVBBBQQREQ2Awk7YQ0JCWQn28z5/ZFkICRAEpJMlvfrunIhM8+Z+Qynp8md5/mcx2QYhiEAAAAAAFBjZlcXAAAAAABAU0WoBgAAAACglgjVAAAAAADUEqEaAAAAAIBaIlQDAAAAAFBLhGoAAAAAAGqJUA0AAAAAQC25ubqA6nA4HDp27Jj8/f1lMplcXQ4AAAAAoJkzDEM5OTkKDw+X2Xz++egmEaqPHTumqKgoV5cBAAAAAGhhDh8+rMjIyPM+3yRCtb+/v6TSD2O1Wl1cDQAAAACgucvOzlZUVJQzj55PkwjV5Uu+rVYroRoAAAAA0GAu1oLMjcoAAAAAAKglQjUAAAAAALVEqAYAAAAAoJaaRE81AAAAgEtnt9tVXFzs6jKARsHd3V0Wi+WSX4dQDQAAADRzhmHo+PHjyszMdHUpQKMSEBCg0NDQi96M7EII1QAAAEAzVx6og4OD5ePjc0kBAmgODMNQfn6+0tLSJElhYWG1fi1CNQAAANCM2e12Z6Bu3bq1q8sBGg1vb29JUlpamoKDg2u9FJwblQEAAADNWHkPtY+Pj4srARqf8uviUu41QKgGAAAAWgCWfAOV1cV1QaiuQwXFdleXAAAAAABoQITqOuJwGLp7/kZNWbhFWflsUwAAAAAALQGhuo5sPZKpH/dn6NOtxxQ/a7W+25nm6pIAAAAANGFDhw7VlClTXF1GvTCZTPr000/P+3xNP3tycrJMJpO2bt16ybXVFKG6jlzRtpUWPzBAHdv4Ki2nUL+fv1GPLf5FOQXMWgMAAAA1YTKZLvj19NNPu7rE82rIIDx//nyZTCZdd911FR7PzMyUyWTSqlWrGqSO+vDJJ5/oueeeq/b4qKgopaSkqGfPnpKkVatWyWQyNcje7ITqOnRF21b68uFBmnB1B5lM0n9/PqzrZn+vdXvTXV0aAAAA0GSkpKQ4v2bPni2r1VrhsUceecQ51jAMlZSUuLBa13Jzc9OKFSv03Xff1enrFhUV1enr1VRgYKD8/f2rPd5isSg0NFRubg2/azShuo55e1j01K9itPCeqxQV6K2jmac19u0NeurT7corbLkXOwAAABoHwzCUX1Tiki/DMKpVY2hoqPPLZrPJZDI5/75z5075+/tr6dKl6tOnjzw9PbV27Vrddddduummmyq8zpQpUzR06FDn34cOHaqHH35Yjz76qAIDAxUaGlpp1jszM1P33XefQkJC5OXlpZ49e+qLL76QJGVkZOiOO+5QRESEfHx81KtXL/3nP/9xHnvXXXdp9erVmjNnjnNWPTk5WZK0fft2jRo1Sn5+fgoJCdGdd96p9PQzk295eXkaN26c/Pz8FBYWppdffrla/1a+vr66++679fjjj19wXEJCgoYNGyZvb2+1bt1a9957r3JzcyvUftNNN+n5559XeHi4oqOjnUuqP/roIw0aNEje3t7q27evdu/erY0bN+rKK6+Un5+fRo0apRMnTjhfa+PGjYqPj1ebNm1ks9k0ZMgQbd68uVqfp9y5M/7t27fXCy+8oLvvvlv+/v5q27at3nzzTefzZy//Tk5O1jXXXCNJatWqlUwmk+66664avX9NNHyMbyH6d2ytrycP1oylSfrwx0P64MeDWr37hP7xm97q1yHQ1eUBAACghTpdbFfMX5e55L0Tnx0pH4+6iSCPP/64/vGPf6hjx45q1apVtY97//339cc//lEbNmzQ+vXrddddd2ngwIGKj4+Xw+HQqFGjlJOTow8//FCdOnVSYmKiLBaLJKmgoEB9+vTRY489JqvVqi+//FJ33nmnOnXqpH79+mnOnDnavXu3evbsqWeffVaSFBQUpMzMTA0bNkx/+MMfNGvWLJ0+fVqPPfaYbr31Vn377beSpD//+c9avXq1PvvsMwUHB+uJJ57Q5s2bddlll130Mz399NPq3LmzFi9erFtuuaXS83l5eRo5cqTi4uK0ceNGpaWl6Q9/+IMmTZqk+fPnO8etXLlSVqtVy5cvr3D89OnTNXv2bLVt21Z33323fvvb38rf319z5syRj4+Pbr31Vv31r3/V3LlzJUk5OTkaP368/vnPf8owDL388ssaPXq09uzZU6PZ53O9/PLLeu655/TEE09o8eLFeuCBBzRkyBBFR0dXGBcVFaWP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\n" + }, + "metadata": {} + } + ], + "source": [ + "# Your code here\n", + "plt.figure(figsize=(12, 4))\n", + "plt.plot(history.history['loss'], label=\"Truncated Normal init\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "a648758ebea0561d", + "metadata": { + "collapsed": false, + "id": "a648758ebea0561d" + }, + "source": [ + "## Task 4: Model Enhancement (Complete or Incomplete)\n", + "### Task 4a: Implementation of at least one advanced technique\n", + "\n", + "- Now it's time to improve your model. Implement at least one technique to improve your model's performance. You can use any of the techniques we have covered in class, or you can use a technique that we haven't covered. If you need inspiration, you can refer to the [Keras documentation](https://keras.io/).\n", + "- Explain the technique you used and why you chose it.\n", + "- If you used a technique that requires tuning, explain how you selected the values for the hyperparameters." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "f3659ac83122567f", + "metadata": { + "id": "f3659ac83122567f" + }, + "outputs": [], + "source": [ + "# Your code here\n", + "model_enhanced = Sequential()\n", + "\n", + "# Convolutional Layer 1\n", + "model_enhanced.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)))\n", + "model_enhanced.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Convolutional Layer 2\n", + "model_enhanced.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'))\n", + "model_enhanced.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Convolutional Layer 3\n", + "model_enhanced.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu', padding='same'))\n", + "model_enhanced.add(MaxPooling2D(pool_size=(2, 2)))\n", + "\n", + "# Flatten the output of the final convolutional layer\n", + "model_enhanced.add(Flatten())\n", + "\n", + "# Dropout Layer (to reduce overfitting)\n", + "model_enhanced.add(Dropout(0.5))\n", + "\n", + "# Dense Layer 1\n", + "model_enhanced.add(Dense(128, activation='leaky_relu'))\n", + "\n", + "# Dense Layer 2 (Output Layer)\n", + "model_enhanced.add(Dense(100, activation='softmax')) # CIFAR-100 has 100 classes\n" + ] + }, + { + "cell_type": "code", + "source": [ + "# Compile the model\n", + "model_enhanced.compile(optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "# Print the model summary\n", + "model_enhanced.summary()" + ], + "metadata": { + "id": "194Gr_4iJpFg", + "outputId": "6726cc9d-1673-412b-9759-2ff0279d7d14", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 463 + } + }, + "id": "194Gr_4iJpFg", + "execution_count": 33, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_4\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_4\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n", + "│ conv2d_12 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_12 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ conv2d_13 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_13 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ conv2d_14 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ max_pooling2d_14 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ flatten_4 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dense_6 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m262,272\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dense_7 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m12,900\u001b[0m │\n", + "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                          Output Shape                         Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
+              "│ conv2d_12 (Conv2D)                   │ (None, 32, 32, 32)          │             896 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_12 (MaxPooling2D)      │ (None, 16, 16, 32)          │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ conv2d_13 (Conv2D)                   │ (None, 16, 16, 64)          │          18,496 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_13 (MaxPooling2D)      │ (None, 8, 8, 64)            │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ conv2d_14 (Conv2D)                   │ (None, 8, 8, 128)           │          73,856 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ max_pooling2d_14 (MaxPooling2D)      │ (None, 4, 4, 128)           │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ flatten_4 (Flatten)                  │ (None, 2048)                │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dropout_3 (Dropout)                  │ (None, 2048)                │               0 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dense_6 (Dense)                      │ (None, 128)                 │         262,272 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dense_7 (Dense)                      │ (None, 100)                 │          12,900 │\n",
+              "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m368,420\u001b[0m (1.41 MB)\n" + ], + "text/html": [ + "
 Total params: 368,420 (1.41 MB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m368,420\u001b[0m (1.41 MB)\n" + ], + "text/html": [ + "
 Trainable params: 368,420 (1.41 MB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ], + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "id": "d9467a483a1dd5d3", + "metadata": { + "collapsed": false, + "id": "d9467a483a1dd5d3" + }, + "source": [ + "### Task 4b: Evaluation of the enhanced model\n", + "\n", + "- Re-train your model using the same number of epochs as before.\n", + "- Compare the accuracy and other selected metric on the test set to the results you obtained before.\n", + "- As before, plot the training accuracy and validation accuracy with respect to epochs, and select an image that the model correctly classified in the test set, and an image that the model incorrectly classified in the test set. Plot the images and report the model's classification probabilities for each." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "7c4701b36dc8fc55", + "metadata": { + "id": "7c4701b36dc8fc55", + "outputId": "7615d36b-fa38-419a-be19-c9a4fa9fd333", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/5\n", + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 6ms/step - accuracy: 0.4275 - loss: 2.1977 - val_accuracy: 0.4056 - val_loss: 2.3068\n", + "Epoch 2/5\n", + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.4426 - loss: 2.1018 - val_accuracy: 0.4135 - val_loss: 2.2775\n", + "Epoch 3/5\n", + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 4ms/step - accuracy: 0.4526 - loss: 2.0536 - val_accuracy: 0.4171 - val_loss: 2.2324\n", + "Epoch 4/5\n", + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.4697 - loss: 1.9758 - val_accuracy: 0.4231 - val_loss: 2.2428\n", + "Epoch 5/5\n", + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - accuracy: 0.4857 - loss: 1.9094 - val_accuracy: 0.4274 - val_loss: 2.2198\n" + ] + } + ], + "source": [ + "# Your code here\n", + "history = model_enhanced.fit(\n", + " x_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=64, # Number of samples per batch\n", + " validation_data=(x_val, y_val), # Validation data\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "eadfc848700215e8", + "metadata": { + "collapsed": false, + "id": "eadfc848700215e8" + }, + "source": [ + "### Task 4c: Discussion of the results\n", + "\n", + "- Briefly discuss the results.\n", + "- Did the model's performance improve?\n", + "- Why do you think this is?\n", + "- Do you think there is room for further improvement? Why or why not?\n", + "- What other techniques might you try in the future?\n", + "- Your answer should be no more than 200 words.\n", + "\n", + "# Your answer here\n", + "- The enhanced model using LeakyRelu and a doubled batch size trained better than the original model in the same number of epochs.\n", + "- LeakyRelu is a more sophisticated activation function; it seems to speed up the learning process moderately.\n", + "- A larger batch size helps capture more of the data's complexity.\n", + "- The model could be further improved by making it deeper, with more parameters." + ] + }, + { + "cell_type": "markdown", + "id": "7415f68f", + "metadata": { + "id": "7415f68f" + }, + "source": [ + "## Criteria\n", + "\n", + "|Criteria|Complete|Incomplete|\n", + "|----|----|----|\n", + "|Task 1|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", + "|Task 2|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", + "|Task 3|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", + "|Task 4|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|" + ] + }, + { + "cell_type": "markdown", + "id": "ad0c10bc", + "metadata": { + "id": "ad0c10bc" + }, + "source": [ + "## Submission Information\n", + "\n", + "🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly.\n", + "\n", + "### Submission Parameters:\n", + "* Submission Due Date: `HH:MM AM/PM - DD/MM/YYYY`\n", + "* The branch name for your repo should be: `assignment-1`\n", + "* What to submit for this assignment:\n", + " * This Jupyter Notebook (assignment_1.ipynb) should be populated and should be the only change in your pull request.\n", + "* What the pull request link should look like for this assignment: `https://github.com//deep_learning/pull/`\n", + " * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily.\n", + "\n", + "Checklist:\n", + "- [ ] Created a branch with the correct naming convention.\n", + "- [ ] Ensured that the repository is public.\n", + "- [ ] Reviewed the PR description guidelines and adhered to them.\n", + "- [ ] Verify that the link is accessible in a private browser window.\n", + "\n", + "If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via our Slack at `#cohort-3-help`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges." + ] } - ], - "source": [ - "from keras.datasets import cifar100\n", - "\n", - "# Load the CIFAR-100 dataset\n", - "(x_train, y_train), (x_test, y_test) = cifar100.load_data(label_mode='fine')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a386b4072078138f", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "ad49291da3a819ea", - "metadata": { - "collapsed": false - }, - "source": [ - "### 1b: Data Preprocessing (4 Marks)\n", - "- With the data downloaded, it's time to preprocess it. Start by normalizing the images so that they all have pixel values in the range [0, 1].\n", - "- Next, convert the labels to one-hot encoded vectors.\n", - "- Finally, split the training set into training and validation sets. Use 80% of the training set for training and the remaining 20% for validation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b18c10172fa72d0c", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "5993757f08c89db7", - "metadata": { - "collapsed": false - }, - "source": [ - "## Task 2: Model Development (Complete or Incomplete)\n", - "### Task 2a: Create a Baseline CNN Model\n", - "- Design a CNN architecture. Your architecture should use convolutional layers, max pooling layers, and dense layers. You can use any number of layers, and you can experiment with different numbers of filters, filter sizes, strides, padding, etc. The design doesn't need to be perfect, but it should be unique to you.\n", - "- Print out the model summary." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c9edafdaf887b8d5", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from keras.models import Sequential\n", - "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n", - "\n", - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "546324c007c73db5", - "metadata": { - "collapsed": false - }, - "source": [ - "### Task 2b: Compile the model\n", - "\n", - "- Select an appropriate loss function and optimizer for your model. These can be ones we have looked at already, or they can be different. \n", - "- Briefly explain your choices (one or two sentences each).\n", - "- Loss function: ______\n", - "- Optimizer: ______" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ab39f4ba69d684e9", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from keras import optimizers\n", - "\n", - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "653fba928413b9f6", - "metadata": { - "collapsed": false - }, - "source": [ - "## Task 3: Model Training and Evaluation (Complete or Incomplete)\n", - "### Task 3a: Train the Model\n", - "\n", - "- Train your model for an appropriate number of epochs. Explain your choice of the number of epochs used - you can change this number before submitting your assignment.\n", - "- Use a batch size of 32.\n", - "- Use the validation set for validation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9de74f274ad08546", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "b48615c26b99d2e9", - "metadata": { - "collapsed": false - }, - "source": [ - "### Task 3b: Accuracy and other relevant metrics on the test set\n", - "\n", - "- Report the accuracy of your model on the test set.\n", - "- While accuracy is a good metric, there are many other ways to numerically evaluate a model. Report at least one other metric, and explain what it measures and how it is calculated.\n", - "\n", - "- Accuracy: ______\n", - "- Other metric: ______\n", - "- Reason for selection: _____\n", - "- Value of metric: ______\n", - "- Interpretation of metric value: ______" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "f670665fda92fb0e", - "metadata": { - "ExecuteTime": { - "end_time": "2024-01-26T17:49:39.016880Z", - "start_time": "2024-01-26T17:49:39.012100Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "58d2d836d4e8ce99", - "metadata": { - "collapsed": false - }, - "source": [ - "### Task 3c: Visualize the model's learning\n", - "\n", - "- Plot the training accuracy and validation accuracy with respect to epochs.\n", - "- Select an image that the model correctly classified in the test set, and an image that the model incorrectly classified in the test set. Plot the images and report the model's classification probabilities for each.\n", - "- Briefly discuss the results. What do the plots show? Do the results make sense? What do the classification probabilities indicate?" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c5b214475a496ca5", - "metadata": { - "ExecuteTime": { - "end_time": "2024-01-26T17:50:59.733968Z", - "start_time": "2024-01-26T17:50:59.730635Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "a648758ebea0561d", - "metadata": { - "collapsed": false - }, - "source": [ - "## Task 4: Model Enhancement (Complete or Incomplete)\n", - "### Task 4a: Implementation of at least one advanced technique\n", - "\n", - "- Now it's time to improve your model. Implement at least one technique to improve your model's performance. You can use any of the techniques we have covered in class, or you can use a technique that we haven't covered. If you need inspiration, you can refer to the [Keras documentation](https://keras.io/).\n", - "- Explain the technique you used and why you chose it.\n", - "- If you used a technique that requires tuning, explain how you selected the values for the hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f3659ac83122567f", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "d9467a483a1dd5d3", - "metadata": { - "collapsed": false - }, - "source": [ - "### Task 4b: Evaluation of the enhanced model\n", - "\n", - "- Re-train your model using the same number of epochs as before.\n", - "- Compare the accuracy and other selected metric on the test set to the results you obtained before.\n", - "- As before, plot the training accuracy and validation accuracy with respect to epochs, and select an image that the model correctly classified in the test set, and an image that the model incorrectly classified in the test set. Plot the images and report the model's classification probabilities for each." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c4701b36dc8fc55", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "id": "eadfc848700215e8", - "metadata": { - "collapsed": false - }, - "source": [ - "### Task 4c: Discussion of the results\n", - "\n", - "- Briefly discuss the results. \n", - "- Did the model's performance improve? \n", - "- Why do you think this is?\n", - "- Do you think there is room for further improvement? Why or why not?\n", - "- What other techniques might you try in the future?\n", - "- Your answer should be no more than 200 words.\n", - "\n", - "# Your answer here" - ] - }, - { - "cell_type": "markdown", - "id": "7415f68f", - "metadata": {}, - "source": [ - "## Criteria\n", - "\n", - "|Criteria|Complete|Incomplete|\n", - "|----|----|----|\n", - "|Task 1|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", - "|Task 2|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", - "|Task 3|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|\n", - "|Task 4|The task has been completed successfully and there are no errors.|The task is still incomplete and there is at least one error.|" - ] - }, - { - "cell_type": "markdown", - "id": "ad0c10bc", - "metadata": {}, - "source": [ - "## Submission Information\n", - "\n", - "🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly.\n", - "\n", - "### Submission Parameters:\n", - "* Submission Due Date: `HH:MM AM/PM - DD/MM/YYYY`\n", - "* The branch name for your repo should be: `assignment-1`\n", - "* What to submit for this assignment:\n", - " * This Jupyter Notebook (assignment_1.ipynb) should be populated and should be the only change in your pull request.\n", - "* What the pull request link should look like for this assignment: `https://github.com//deep_learning/pull/`\n", - " * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily.\n", - "\n", - "Checklist:\n", - "- [ ] Created a branch with the correct naming convention.\n", - "- [ ] Ensured that the repository is public.\n", - "- [ ] Reviewed the PR description guidelines and adhered to them.\n", - "- [ ] Verify that the link is accessible in a private browser window.\n", - "\n", - "If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via our Slack at `#cohort-3-help`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.9.19" + }, + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "accelerator": "GPU" }, - "language_info": { - "name": "python", - "version": "3.9.19" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file