diff --git a/01_materials/labs/lab_1.ipynb b/01_materials/labs/lab_1.ipynb index 0b05f8c7..39bc8507 100644 --- a/01_materials/labs/lab_1.ipynb +++ b/01_materials/labs/lab_1.ipynb @@ -23,6 +23,25 @@ "The following cell will check if the packages are installed, and if not, it will install them. Students familiar with how pip works might note that it already checks this before installing! The reason for this code (which will also appear in subsequent notebooks) is to speed up execution if you re-run the entire notebook - it will skip the installation step if the packages are already installed." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the packages are installed, if not install them.\n", + "# Note - if you are working locally, you may want to comment this section out\n", + "# ...and use your preferred method of installing packages.\n", + "#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)" + ] + }, { "cell_type": "markdown", "metadata": { @@ -42,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -56,9 +75,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 8, 8)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.images.shape" ] @@ -74,9 +104,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 64)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.data.shape" ] @@ -92,9 +133,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797,)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.target.shape" ] @@ -110,9 +162,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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TE2ZMkXz5s1TbW3tJbfZtm2bbrjhBqWnp+umm27Sa6+9dtF9Ojo6tHr1auXm5mrcuHEqLCzUhg0b1N/fH/hjeOedd/Tyyy9rx44dGjt2bOD5iJ9knsdwOCxJyszMHHJ7VlaWJOmqq64KbF+Ij2Sex4MHD2rOnDmDZSxJY8eO1T333KO2tjYdOnQosH3FU0q/Qu7r69Nnn32mJ598Ujk5OTp79qz279+vpUuXqqqqSo8++uiQ++/du1f19fXauHGjJkyYoMrKSi1fvlxpaWlatmyZpC+H7fbbb9eYMWP07LPPKhKJqKmpSZs3b1Zra6uqqqouu6aCggJJX77l8k1++9vfatWqVSovL9ett96a9J+PjHbJPI9LlizRjBkztG7dOlVWVio/P1/vv/++tmzZou9973uaPXv2FT8vSIxknsezZ89qypQpF92enp4uSfr1r3+tO+64I8ZnwhCXpKqqqpwkd/jw4Zi36e/vd+fOnXOrVq1yc+fOHfJnktz48eNdR0fHkPvPmjXLzZw5c/C21atXu4kTJ7rjx48P2f6FF15wktzRo0eHZK5fv37I/SKRiItEIjGtd926de766693X3zxhXPOufXr1ztJrrOzM6btET+jYR7b29vdvHnznKTBn+9///uut7c31oeMOEn1eVyyZInLyspyPT09Q25fsGCBk+T+6q/+6hszLErpt6wlaffu3Zo/f74mTpyotLQ0hcNhvfLKK/rwww8vuu+iRYs0bdq0wf8eO3asHnroIbW0tOjEiROSpDfffFMLFy5Udna2+vv7B3/uueceSVJjY+Nl19PS0qKWlpZvXPehQ4f00ksvadu2bRo/fvxwHjIMS9Z5/Pzzz1VaWqru7m5VV1fr7bffVmVlpd59913df//9I/JxDUZess7jE088odOnT+vRRx/V//7v/+rkyZN65pln9O///u+SlJSfH0sp/hnynj179OCDDyonJ0c7d+5UU1OTDh8+rJUrV6q3t/ei+1933XWXvO3CP+04efKk3njjDYXD4SE/N998syQF9k+SVq5cqaVLl+rb3/62urq61NXVNbjm7u7uQC77h/hK5nl8/vnn1dzcrH379unhhx/WggUL9KMf/UjV1dX61a9+perq6kD2g/hJ5nlctGiRqqqq9PbbbysSiei6667Tnj17tGnTJkka8tlyMknpz5B37typwsJC7dq1a8hVWC51PeSOjo5L3nbNNddIkqZOnapbbrlFzz333NdmBPVPk44ePaqjR49q9+7dF/1ZJBLRnDlz1NzcHMi+EB/JPI/Nzc3KycnR9OnTh9z+ne98R5L0wQcfBLIfxE8yz6MkrVixQo888og+/vhjhcNhzZw5U3/913+tUCikBQsWBLafeErpQg6FQho3btyQYevo6LjkWYQHDhzQyZMnB9+WOX/+vHbt2qVIJDJ4HcvFixerrq5OkUhEkydPHrG119fXX3RbNBrVq6++qpqamqT9P8DRLJnnMTs7WwcOHNBvfvObIbPX1NQkSXG57jCClczzeEFaWtrgCYWnT5/Wyy+/rNLSUuXn54/4vkdC0hfyW2+99bVn5N17771avHix9uzZo8cff1zLli1TW1ubNm3apOnTp+vjjz++aJupU6fqrrvu0jPPPDN4FuFHH3005NT+jRs3at++fbrzzju1du1a3Xjjjert7VVra6vq6uq0devWyx6cZs6cKUnf+DlJSUnJRbc1NDRIkubPn6+pU6dednskRqrO45o1a1RdXa3vfve7euqpp5SXl6cPPvhAmzdv1rRp0/TII4/E+AwhnlJ1Hv/v//5Pf/d3f6f58+crIyNDH330kf7mb/5GY8aM0T/8wz/E+OwYlOizyq7UhbMIL/Vz7Ngx55xzW7ZscQUFBS49Pd3Nnj3bbd++ffBs5a+S5NasWeMqKytdJBJx4XDYzZo1y1VXV1+0787OTrd27VpXWFjowuGwmzJlirvtttvc008/7c6cOTMk83fPIszPz3f5+flX9Jg5y9qu0TCP77//vnvggQdcbm6uS09Pd9dff7177LHH3CeffDKs5wojL9Xn8dSpU+4P//AP3bXXXuvC4bCbMWOG+/M///OkPzaGnHMuDr0PAAAuI6XPsgYAIFlQyAAAGEAhAwBgAIUMAIABFDIAAAZQyAAAGBDTF4MMDAyovb1dGRkZQ77VBZAk55x6enqUnZ0dly91Zx5xOcwjLBnOPMZUyO3t7crLywtkcUhdbW1tcfkKReYRsWAeYUks8xhTIWdkZAwGTpo0yX9lCfaXf/mX3hnvvvuud8bBgwe9M4K4ys4nn3zitX1fX59efPHFwTkZaUHNY1dXl/da7rvvPu+MP/iDP/DOyMrK8s548803vTN+8YtfeGf4fg9xd3e38vLykm4eg1BZWWkiI4jfi+eff947w4LhzGNMhXzhbZhJkyYlfOCCkJ6e7p0xduxY74wgnssgrpUcxPMhKW5v1wU1jwMDA95rCWIOgnj+rcx0ECUY1DEm2eYxCFdddZV3RhBv8wcxj4l+LoMWyzxyUhcAAAZQyAAAGEAhAwBgAIUMAIABFDIAAAZQyAAAGEAhAwBgAIUMAIABFDIAAAZQyAAAGEAhAwBgAIUMAIABFDIAAAZQyAAAGBDT5RctaW5u9s6IRqPeGQ0NDd4ZQSgvL/fOKCsr89q+r6/Pew2JYOG5C2odQbAy06NVENfn/slPfuKdUVNT453x+uuve2e89NJL3hlWfrdixStkAAAMoJABADCAQgYAwAAKGQAAAyhkAAAMoJABADCAQgYAwAAKGQAAAyhkAAAMoJABADCAQgYAwAAKGQAAAyhkAAAMoJABADCAQgYAwAAKGQAAA9LiubMgLsAdxAXhi4qKvDOCeCxBXIA7CL7P6ZkzZ7R169ZgFhNHWVlZJjKCEMSF2IP43SooKPDOGK2CmKU5c+aYyMjPz/fOCGIeg/i9iCdeIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABiQFs+dRaNR74wjR474LyQACxcuTPQSJEkrVqzwzigqKvLavru723sNiVBRUeGdUVJS4p3R0NDgnRGEIC4Ij8TasGGDd4bv8UCSTp8+7Z0RhK6uLu+MrKws74xY8QoZAAADKGQAAAygkAEAMIBCBgDAAAoZAAADKGQAAAygkAEAMIBCBgDAAAoZAAADKGQAAAygkAEAMIBCBgDAAAoZAAADKGQAAAygkAEAMIBCBgDAgLR47iyICz0XFxd7ZxQUFHhnWLmofEVFRaKXkLSCmMeSkhLvjL//+7/3zjh27Jh3BpJfaWmpd0ZXV5d3Rm1trXfG66+/7p0RjUa9M8rLy70zYsUrZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAPS4rmzsrIyExlBKCoqMpFRUFDgnTFatba2emc0Nzd7Z9TU1HhnBPF7EcQ6srKyvDOQ/EpLS70z5syZ451RUlLinVFeXu6dESteIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABiQlugFJEI0GvXOOHLkiHdGEBeEx5VrbW31zigqKvLOCOJi7vX19d4ZjY2N3hlBPBZcuYaGBu+MgoKClMkIQnNzs9f2Z86cifm+vEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADKCQAQAwIC3RC0iEaDTqnRHEhditXIB7tCoqKvLOqKio8M5YsmSJd0YQjyWImUZinT592jsjiFkKYh1BKC4u9s7wPU53d3fHfF9eIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGxHQ9ZOecpOFd19Gy/v5+74xz5855Z6TK83nhcVyYk5EW1DwG8fxbmaW+vj7vDObxylg6Pn7xxRfeGfF63uIhiN9P37/Xnp4eSbE9ryEXw71OnDihvLw8r0Uh9bW1tSk3N3fE98M8IhbMIyyJZR5jKuSBgQG1t7crIyNDoVAosAUiNTjn1NPTo+zsbI0ZM/KfgjCPuBzmEZYMZx5jKmQAADCyOKkLAAADKGQAAAygkAEAMIBCBgDAgKQt5Gg0qlAopPfeey+QvFAopCeeeCKQrK9mVlRUXPH2P//5z7V48WLl5OQoFAqprKwssLUhWKk+j//xH/+hNWvW6Fvf+pYyMjI0bdo03X333XrrrbcCXSOCkerzKEktLS36wQ9+oBkzZmj8+PGKRCL66U9/qlOnTgW3yDhL2kIeDV588UWdOnVK999/v8aNG5fo5WAU+5d/+RcdOnRIK1euVG1trXbs2KH09HQtWrRI//RP/5To5WGU6ezs1B133KGDBw9q06ZNqqur05o1a7R9+3bdfffdGhgYSPQSr0hM39SFxOjp6Rn8d2v//M//nODVYDT7i7/4C73wwgtDbrv33nt16623auPGjXr00UcTtDKMRrW1tTp16pR27dqlRYsWSZIWLlyovr4+/exnP9ORI0c0d+7cBK9y+FL6FXJvb6/WrVunoqIiZWZmasqUKZo3b55qa2svuc22bdt0ww03KD09XTfddJNee+21i+7T0dGh1atXKzc3V+PGjVNhYaE2bNgQyNe0fVU8vtQA8ZPM8/h7v/d7F902duxY3XbbbWprawtsP4ifZJ7HcDgsScrMzBxye1ZWliTpqquuCmxf8ZTSr5D7+vr02Wef6cknn1ROTo7Onj2r/fv3a+nSpaqqqrro/+r37t2r+vp6bdy4URMmTFBlZaWWL1+utLQ0LVu2TNKXw3b77bdrzJgxevbZZxWJRNTU1KTNmzertbVVVVVVl11TQUGBJKm1tXUkHjIMS7V57O/v1zvvvKObb7552Nsi8ZJ5HpcsWaIZM2Zo3bp1qqysVH5+vt5//31t2bJF3/ve9zR79uwrfl4SyiWpqqoqJ8kdPnw45m36+/vduXPn3KpVq9zcuXOH/JkkN378eNfR0THk/rNmzXIzZ84cvG316tVu4sSJ7vjx40O2f+GFF5wkd/To0SGZ69evH3K/SCTiIpFIzGu+YMKECW7FihXD3g7xMdrm0Tnnnn76aSfJ1dTUXNH2GDmjYR7b29vdvHnznKTBn+9///uut7c31odsTsq/J7p7927Nnz9fEydOVFpamsLhsF555RV9+OGHF9130aJFmjZt2uB/jx07Vg899JBaWlp04sQJSdKbb76phQsXKjs7W/39/YM/99xzjySpsbHxsutpaWlRS0tLgI8QySRV5nHHjh167rnntG7dOpWWlg57e9iQrPP4+eefq7S0VN3d3aqurtbbb7+tyspKvfvuu7r//vsD//gwXlK6kPfs2aMHH3xQOTk52rlzp5qamnT48GGtXLlSvb29F93/uuuuu+RtF06lP3nypN544w2Fw+EhPxfetvv0009H8BEhmaXKPFZVVWn16tX6sz/7M/3t3/5t4PmIj2Sex+eff17Nzc3at2+fHn74YS1YsEA/+tGPVF1drV/96leqrq4OZD/xltKfIe/cuVOFhYXatWvXkKuwXOrasR0dHZe87ZprrpEkTZ06Vbfccouee+65r83Izs72XTZSVCrMY1VVlR577DGtWLFCW7du5epGSSyZ57G5uVk5OTmaPn36kNu/853vSJI++OCDQPYTbyldyKFQSOPGjRsybB0dHZc8i/DAgQM6efLk4Nsy58+f165duxSJRAav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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Selecting 9 random indices\n", "random_indices = np.random.choice(len(digits.images), 9, replace=False)\n", @@ -142,11 +205,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH2CAYAAAChsP9pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjsklEQVR4nO3db2jVdf/H8dfZdlzppnMp2ebcGWeUFtokqMxLmgmRJWyVFBHYqBuCmSl147quMKdWjiiu3cnfKmIT9CKRhpqXEP1xBiVkcE0hshx5vCZjy6zNiU2d+/xuhKPlv7N9Pjt7n+35gN3odM7r+zln751X55xv5xNxzjkBAIARlTHSCwAAABQyAAAmUMgAABhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAAWlbyA0NDYpEIvr222+D5EUiEa1cuTJI1p8zq6urh3z7H3/8UY8//rgmT56s8ePH65577tHu3bvDLRDBMI+whHlMT2lbyKNdIpHQvHnz9MMPP6iurk47duzQ1KlTVVlZqY8++mikl4cxhnmEJaN1HrNGegG4spqaGp09e1affPKJCgsLJUkPPfSQZs+erTVr1ujRRx9VRgb/PYXUYB5hyWidx/Rb8SD09PTopZdeUllZmSZNmqT8/HzNmzdPu3btuupt3n33Xd16663Kzs7W7bffrg8//PCy67S3t2v58uWaPn26xo0bp5KSEq1fv169vb3B1v7VV1/pzjvv7B82ScrMzNTixYvV2tqqb775JtixkBrMIyxhHu0Z1a+Qz507p19//VUvv/yyCgsLdf78eX322Wd67LHHVF9fr2XLlg24/u7du7Vv3z5t2LBBEyZM0ObNm/XUU08pKytLS5culfTHsN19993KyMjQq6++qng8rgMHDui1115TIpFQfX39NdcUi8Uk/fGWy7WcP39e+fn5l12enZ0tSTp8+LDuvffeJB8JWMA8whLm0SCXpurr650kd/DgwaRv09vb6y5cuOCee+45N3fu3AH/TpK78cYbXXt7+4Drz5w505WWlvZftnz5cpeTk+OOHz8+4PZvvfWWk+S+++67AZnr1q0bcL14PO7i8fh111pZWeny8vJcd3f3gMsXLFjgJLk33njjuhlIHeaRebSEeUzPeRzVb1lL0o4dOzR//nzl5OQoKytL0WhUH3zwgb7//vvLrrto0SLdfPPN/f+cmZmpJ598Ui0tLTpx4oQkac+ePVq4cKEKCgrU29vb/7N48WJJ0v79+6+5npaWFrW0tFx33StXrlRXV5eWLVumn376SR0dHVq7dq2+/vprSUrLz0fAPMIW5tGW9Fx1khobG/XEE0+osLBQW7du1YEDB3Tw4EE9++yz6unpuez606ZNu+plp06dkiR1dHTo448/VjQaHfBzxx13SJJ++eWXIGtftGiR6uvr9eWXXyoej2vatGlqbGzUxo0bJWnAZydID8wjLGEe7RnVnyFv3bpVJSUl2r59uyKRSP/l586du+L129vbr3rZTTfdJEmaMmWK5syZo9dff/2KGQUFBb7L7vfMM8/o6aef1tGjRxWNRlVaWqpNmzYpEolowYIFwY6D1GAeYQnzaM+oLuRIJKJx48YNGLb29varnkX4+eefq6Ojo/9tmYsXL2r79u2Kx+OaPn26JGnJkiXau3ev4vG4Jk+ePOz3ISsrS7NmzZIkdXV16b333lNFRYWKi4uH/dgIi3mEJcyjPWlfyF988cUVz8h7+OGHtWTJEjU2NmrFihVaunSpWltbtXHjRt1yyy06evToZbeZMmWKHnjgAa1du7b/LMIjR44MOLV/w4YN+vTTT3Xfffdp1apVuu2229TT06NEIqG9e/eqrq6ufzivpLS0VJKu+znJzz//rLffflvz589Xbm6ujhw5ojfffFMZGRl65513knx0kGrMIyxhHtPMSJ9VNlSXziK82s+xY8ecc87V1NS4WCzmsrOz3axZs9z777/v1q1b5/561yW5559/3m3evNnF43EXjUbdzJkz3bZt2y479smTJ92qVatcSUmJi0ajLj8/3911113ulVdecWfOnBmQ+dezCIuLi11xcfF179+pU6fcgw8+6KZOneqi0aibMWOGe+GFF9zJkycH/Vhh+DGPsIR5TE8R55xLRfEDAICrG9VnWQMAkC4oZAAADKCQAQAwgEIGAMAAChkAAAMoZAAADEjqi0H6+vrU1tam3NzcAd/qAkiSc07d3d0qKChIyZe6M4+4FuYRlgxmHpMq5La2NhUVFQVZHEav1tbWa34LTyjMI5LBPMKSZOYxqULOzc3tD5w4ceKQF9TZ2Tnk216yadMm74x///vf3hkzZszwzqipqfHOsPAl6qdPn1ZRUVH/nAy3UPMYwmia6b/97W/eGf/4xz+8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L7/8sgoLC3X+/Hl99tlneuyxx1RfX69ly5YNuP7u3bu1b98+bdiwQRMmTNDmzZv11FNPKSsrS0uXLpX0x7DdfffdysjI0Kuvvqp4PK4DBw7otddeUyKRUH19/TXXFIvFJP3xlsu1nD9/Xvn5+Zddnp2dLUk6fPiw7r333iQfCVjAPMIS5tEgl6bq6+udJHfw4MGkb9Pb2+suXLjgnnvuOTd37twB/06Su/HGG117e/uA68+cOdOVlpb2X7Z8+XKXk5Pjjh8/PuD2b731lpPkvvvuuwGZ69atG3C9eDzu4vH4dddaWVnp8vLyXHd394DLFyxY4CS5N95447oZSB3mkXm0hHlMz3kc1W9ZS9KOHTs0f/585eTkKCsrS9FoVB988IG+//77y667aNEi3Xzzzf3/nJmZqSeffFItLS06ceKEJGnPnj1auHChCgoK1Nvb2/+zePFiSdL+/fuvuZ6Wlha1tLRcd90rV65UV1eXli1bpp9++kkdHR1au3atvv76a0lKy89HwDzCFubRlvRcdZIaGxv1xBNPqLCwUFu3btWBAwd08OBBPfvss1fcxnHatGlXvezUqVOSpI6ODn388ceKRqMDfu644w5J0i+//BJk7YsWLVJ9fb2+/PJLxeNxTZs2TY2Njdq4caMkDfjsBOmBeYQlzKM9o/oz5K1bt6qkpETbt28fsAvL1fZ9bW9vv+plN910kyRpypQpmjNnjl5//fUrZhQUFPguu98zzzyjp59+WkePHlU0GlVpaak2bdqkSCSiBQsWBDsOUoN5hCXMoz2jupAjkYjGjRs3YNja29uvehbh559/ro6Ojv63ZS5evKjt27crHo/372O5ZMkS7d27V/F4XJMnTx72+5CVlaVZs2ZJkrq6uvTee++poqJCxcXFw35shMU8whLm0Z60L+QvvvjiimfkPfzww1qyZIkaGxu1YsUKLV26VK2trdq4caNuueUWHT169LLbTJkyRQ888IDWrl3bfxbhkSNHBpzav2HDBn366ae67777tGrVKt12223q6elRIpHQ3r17VVdXd81NqEtLSyXpup+T/Pzzz3r77bc1f/585ebm6siRI3rzzTeVkZGhd955J8lHB6nGPMIS5jHNjPRZZUN16SzCq/0cO3bMOedcTU2Ni8ViLjs7282aNcu9//77bt26de6vd12Se/75593mzZtdPB53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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Selecting 9 random indices of images labelled as 9\n", "random_indices = np.random.choice(np.where(digits.target == 9)[0], 9, replace=False)\n", @@ -187,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -213,11 +287,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (1437, 64)\n", + "y_train shape: (1437,)\n", + "X_test shape: (360, 64)\n", + "y_test shape: (360,)\n" + ] + } + ], "source": [ "print(f'X_train shape: {X_train.shape}')\n", "print(f'y_train shape: {y_train.shape}')\n", @@ -251,9 +336,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Before one-hot encoding: 6\n", + "After one-hot encoding: [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n" + ] + } + ], "source": [ "from tensorflow.keras.utils import to_categorical\n", "\n", @@ -284,11 +378,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " dense (Dense) (None, 64) 4160 \n", + " \n", + " dense_1 (Dense) (None, 64) 4160 \n", + " \n", + " dense_2 (Dense) (None, 10) 650 \n", + " \n", + "=================================================================\n", + "Total params: 8,970\n", + "Trainable params: 8,970\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], "source": [ "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense\n", @@ -320,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -350,11 +466,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "36/36 [==============================] - 1s 8ms/step - loss: 1.4679 - accuracy: 0.6118 - val_loss: 0.7564 - val_accuracy: 0.7674\n", + "Epoch 2/5\n", + "36/36 [==============================] - 0s 2ms/step - loss: 0.4827 - accuracy: 0.8547 - val_loss: 0.5290 - val_accuracy: 0.8333\n", + "Epoch 3/5\n", + "36/36 [==============================] - 0s 2ms/step - loss: 0.3094 - accuracy: 0.9060 - val_loss: 0.3439 - val_accuracy: 0.8715\n", + "Epoch 4/5\n", + "36/36 [==============================] - 0s 2ms/step - loss: 0.2253 - accuracy: 0.9330 - val_loss: 0.2892 - val_accuracy: 0.8958\n", + "Epoch 5/5\n", + "36/36 [==============================] - 0s 2ms/step - loss: 0.1822 - accuracy: 0.9487 - val_loss: 0.3225 - val_accuracy: 0.8889\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.fit(\n", " X_train, # Training data\n", @@ -378,11 +521,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12/12 [==============================] - 0s 907us/step - loss: 0.2706 - accuracy: 0.9167\n", + "Loss: 0.27\n", + "Accuracy: 91.67%\n" + ] + } + ], "source": [ "loss, accuracy = model.evaluate(X_test, y_test)\n", "\n", @@ -401,11 +554,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12/12 [==============================] - 0s 725us/step\n" + ] + }, + { + "data": { + "image/png": "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+2q/DwaDatu2bb3H/cADD2j06NG65ZZbVFJSIkk6d+6cpAvHLZo1a6aEhIR61R47dqyeeOIJhUIh7dmzR0899ZTGjRunXbt2qVevXpIuPP79+/eradOmtdaoevyHDx/WgAEDdOONN2rx4sVKSUlRXFycPvzwQ02ePNm3r4DExsZqw4YN+tnPfqYhQ4ZIkuLj4zV//nzNmzdPnTp18mU9DS1a+7FK+/btw7WHDBmi6667TjNmzNADDzygtLS0etWkHyOLnqyJnqzJl0BOTU3VLbfccsl5qvbzf9P111+vtm3b6u233651maowrGqo48ePV3vAFRUV4Uasj71792rv3r168803a/yuR48euvnmm1VYWFiv2klJSeHnpH///kpNTdWgQYM0depUrVu3TtKFx9+8efOLHt+4/vrrJUl5eXk6c+aM1qxZo+Tk5PDv6zu2S+nZs6e2bdumo0eP6uTJk+rRo4dKS0v1+OOPa+DAgb6vryFEaz9ezG233SZJ+uyzz+r94Uc/RhY9WRM9WVODnNRVV8OGDdPrr7+uyspK3X777Redr+oge25urr73ve+Fp7/xxhuevpyen59fY1pOTo5WrFihvLw8X/8CHzBggH7+859rxYoV2rZtm/r3769hw4Zp/vz5atu2rbp163bRZaveqN88kcDMtGzZMt/G922dOnUKP/6ZM2cqPj5ev/jFLxpsfS6IdD9eTFWf9uzZ07ea9GN0oCevsZ70sr/7Yt+x+7aMjAyLj4+vMb2iosKGDh1qbdq0sezsbNuwYYNt2rTJcnJyLCMjw9asWROe9/777w8fM9i4caP97ne/s44dO1piYqLnExa+6WLHkPPz802SzZkz57I1VMt37MzMDh8+bHFxcTZ48GAzMzt9+rSlpaVZ586d7YUXXrB3333X3nnnHVu2bJmNGTMmfNzj008/tdjYWEtPT7f169fbmjVr7J577rFevXqZJMvPzw+vw8sJC2Zmv/71r23FihWWn59vr7/+uo0ePdqaNGliubm5l1020qK9H2fPnm2TJk2y3NxcKygosLy8PHvooYcsJibGxowZU21e+tH9fjSjJy+GnqxdRLeQY2JitHbtWi1evFivvfaaFixYEL603KBBg9SnT5/wvK+88oratWunnJwcvfjii+rXr59Wr16tcePG1ajbEH8Rnj59WpJqPfZTV126dNFjjz2m3/72t9qyZYsGDhyorVu3auHChXrppZd08OBBNW/eXF27dtUPfvCD8FcTevfurdWrV2vmzJkaPXq02rZtq/Hjx+uXv/ylhg4detn1nj9/XpWVlTKzy8577tw5/epXv9KRI0fUvHlz3XHHHSooKNCAAQPq/bijRaT78ZZbbtGLL76ovLw8ffnll4qLi9NNN92k3//+93r44YerzUs/Xv39KNGT11pPBqwuI4CysrK0atUq7du3T3FxcZEeDq5x9CNcQ096x92e6ig/P1+zZs2i0eAE+hGuoSe9YwsZAAAHsIUMAIADCGQAABxAIAMA4AACGQAAB9Tpe8jnz5/XsWPHlJCQUOvl3XBtMzOVlZWpY8eOatKk4f/Gox9xKfQjXHIl/VinQD527Ji6dOniy+Bw9SouLlbnzp0bfD30I+qCfoRL6tKPdQrkqguYFxcX17gbSTTy48bmM2bM8Fzjgw8+8FzDj9djz549npYvKyvTv/zLv9T7zlhXyqV+fPLJJz3XeP/99z3XmDBhgucajzzyiOcaLjh16pS6dOlyTfbj1q1bPdf49hW46qO0tNRzjYULF3qu4cf7wqsr6cc6BXLVbpjExMSIN5wfWrZs6blGMBjRq46G+bGLzK/XtLF217nUj9+8mH19xcTEeK7hx8UYIv1c+u1a7Mf4+HjPNfzYze/Hc9+8eXPPNSL9enxTXZ4TTuoCAMABBDIAAA4gkAEAcACBDACAAwhkAAAcQCADAOAAAhkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDggICZ2eVmOnXqlFq1aqXS0tKI386qsLDQc420tDTPNR5//HHPNUpKSjzXWLFihecadWiBS2rs/nCpH9PT0z3X2Lx5s/eB+ODgwYOea6SkpHgfiEfR2o9vvfWW57GMHDnSc42ridfPNj9cSX+whQwAgAMIZAAAHEAgAwDgAAIZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4AACGQAABxDIAAA4gEAGAMABBDIAAA4gkAEAcEAw0gO4Un7cgPvmm2/2XMOPG7HPnTvXc42MjAzPNRBZfvTj7t27PdcoKCjwXCMzM9NzDcAvhYWFnmv069fPc426YgsZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4AACGQAABxDIAAA4gEAGAMABBDIAAA4gkAEAcACBDACAAwhkAAAcQCADAOCAgJnZ5WY6deqUWrVqpdLSUiUmJtZ7ZUVFRfVetkq3bt0817iaHDx40HONlJQUT8v71R+uru9ScnJyPNeYOHGi94H4IDk52XMNP97jXl3L/ejH8+9HT+fl5XmusXv3bifGMWLECE/LX0l/sIUMAIADCGQAABxAIAMA4AACGQAABxDIAAA4gEAGAMABBDIAAA4gkAEAcACBDACAAwhkAAAcQCADAOAAAhkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHBAMNIDuFKDBg3yXKNfv36eaxQUFHiuMXLkSM81UlJSPNdA/WVmZjpRw48b03fr1s1zjcLCQs81/Hh/Xqv8+DyYO3eu5xp+2L17t+ca//znP30YSeNhCxkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4IBgY67Mj5tnFxQUeK7hh9atW3uukZaW5n0ggPx5bz3++OOeayxatMhzjZycHM81EFnp6emea2RnZ3uuUVRU5LlGY2ILGQAABxDIAAA4gEAGAMABBDIAAA4gkAEAcACBDACAAwhkAAAcQCADAOAAAhkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDggGCkBxAJhYWFnmuUlpZ6rjFo0CDPNRBZfvRSQUGB5xp5eXmea/hxM/dDhw55rjF37lxPy5eVlXkeQ7QqKSnxXMOPXlq0aJHnGn5ISUmJ9BCuCFvIAAA4gEAGAMABBDIAAA4gkAEAcACBDACAAwhkAAAcQCADAOAAAhkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHBCM9gGiVnJwc6SHAAQUFBZ5r+HFDeD/4cTP3fv36RXwcp06d8jyGaFVYWOi5xqJFizzXKCoq8lzj8ccf91wjMzPTc43GxBYyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4AACGQAABxDIAAA4oE73QzYzSVfPfUZPnz7tucb58+c91/Dj+WzSJPJ/U1U9jqo+aWgu9eO5c+c816ioqPBhJG4IhUKea3h9Xa/lfjxz5oznGpWVlZ5r+PHcf/31155ruPCaXEk/BqwOcx05ckRdunTxPjJc1YqLi9W5c+cGXw/9iLqgH+GSuvRjnQL5/PnzOnbsmBISEhQIBHwbIK4OZqaysjJ17NixUbbY6UdcCv0Il1xJP9YpkAEAQMOK/AFIAABAIAMA4AICGQAABxDIAAA4wFMg5+TkKBAIhH+CwaA6d+6siRMn6ujRo36N8ZJSUlKUmZlZ7+U/++wz3XfffbruuuvUokUL3X777Vq7dq2nMX3zOQkEAkpMTNSdd96pVatWeapbF5mZmUpJSan38unp6TXGHwgE9KMf/ci/QTaQq6Ef9+/fr5/97Gfq2rWrmjdvrh49euiXv/ylvvzyy3rXjOZ+LC8v1+zZs9WtWzfFxsYqOTlZTz31lM6ePevfIBtQtPdkcXGxRo0ape7duys+Pl6tWrVSWlqa/vCHP3j6/jw9Wbs6XRjkcpYvX67evXvr7Nmz2rJlixYsWKDNmzdrz549io+P92MVDaKoqEj9+/dXhw4dtHTpUrVs2VJ/+tOfNHLkSL355pu677776l37Jz/5iaZNmyYz08GDBzV//nyNHz9eZqbx48f7+Cj81717d+Xm5lab1rp168gMph6itR8///xz3XHHHUpMTNS8efPUtWtXffTRR5ozZ47y8/P13//93/X+Gk+09uNPf/pTrV+/XrNnz9att96qbdu26dlnn9XevXs9/+HcmKK1J8+cOaPExETNmjVLXbt2VXl5udavX6/HHntMhYWFevnll+tdm56shXmwfPlyk2Q7duyoNn3WrFkmyf785z9fdNkzZ854WXVYcnKyZWRk1GvZSZMmWVxcnB05ciQ8raKiwlJTU61Lly5WWVlZr7qSbPLkydWmFRUVmSQbOHBgvWrWVUZGhiUnJ9d7+UGDBtl3v/td/wbUiKK9H5ctW2aSbNOmTdWmz58/3yTZrl276lU3Wvtx27ZtJsleeOGFatOrno+NGzf6MMKGFe09eTFjx461YDBo586dq9fy9GTtGuQY8h133CFJOnTokKQLuwhatmypPXv2aMiQIUpISNDgwYMlXdj8f/bZZ9W7d281a9ZMSUlJmjhxoj7//PNqNUOhkLKystS+fXu1aNFCd999tz788ENP4/zggw908803q1OnTuFpMTExGjp0qIqLiz3X/6bk5GQlJSXpxIkT1aafOnVK06dPD+/+6NSpk6ZMmVLjEnh//OMfNXDgQN1www2Kj49Xnz599Jvf/MaXSxVe7aKlH5s2bSpJatWqVbXpVXsn4uLiPNX/pmjoxw8++ECS9OMf/7ja9GHDhkmSVq9e7du6Glu09OTFJCUlqUmTJoqJifGtJj3p0y7rb9u/f7+kCy9alfLycg0fPlyTJk3SjBkzVFFRofPnz2vEiBHaunWrsrKydOedd+rQoUOaM2eO0tPTtXPnTjVv3lyS9OCDD2rlypWaPn267rnnHn3yyScaPXq0ysrKaqy/6vhAUVHRJcdZXl6uNm3a1JjerFkzSdLHH38cfuN4VVpaqpMnT1ar99VXX2nQoEE6cuSInn76afXt21d79+7V7NmztWfPHm3atCl85Z8DBw5o/Pjx4abcvXu3nnvuOf3973/Xq6++esl1z507V9nZ2crPz1d6evplx3rgwAG1adNGp06dUnJyssaNG6eZM2eGX4toEy39OHLkSHXt2lXTpk3TkiVLlJycrF27dmnhwoW69957lZqa6s8Toujox/Lyckn/936s8s33Z7SKlp6sYmaqrKxUWVmZNm7cqJycHE2bNk3BoH8RQk/Kn13W27dvt1AoZGVlZbZu3TpLSkqyhIQEO378uJld2EUgyV599dVqy69atcok2erVq6tN37Fjh0myJUuWmJnZp59+apJs6tSp1ebLzc01STV2x/To0cN69Ohx2fGPHDnSWrdubWVlZdWmDxgwwCTZ/Pnz6/Q8fJske+SRRywUCll5ebl99tlnNnz4cEtISLCdO3eG51uwYIE1adKkxu6sv/zlLybJ1q9fX2v9yspKC4VCtnLlSouJibGTJ0+Gf1fb7pjs7GyLiYmxgoKCy479mWeesSVLlth7771nf/3rX+3RRx+1YDBoAwcOrPcu/MYS7f1oZnbs2DHr37+/SQr/jBkzpt67Bs2itx/z8vJMkr322mvVpr/yyismyb7zne/U5eFH1NXQk2YXeqOqHwOBgD3zzDN1XrY29GTtfAnkb//06dPH3n///fB8Vc1WWlpabfkJEyZY69atrby83EKhULWf9u3b29ixY83MbMmSJSap2gtlZhYKhSwYDNb7+MimTZssEAjYqFGj7MCBA3b8+HGbOXOmxcTEmCRbuHBhverW9pw0bdrU1q1bV22+u+66y/r27VvjsZeVlVkgELCsrKzwvLt27bJ7773X2rRpU6P29u3bw/N5PYZcm+eff94k2Zo1a3yt67do78eTJ0/arbfeat/97nctNzfXtmzZYkuWLLEOHTrYkCFDLBQK1atutPbj119/bT179rSOHTvaxo0b7Z///Kdt2LDB2rVrZzExMda7d+961W1M0d6TVf7xj3/Yjh077J133rEnn3zSYmNj7dFHH613PXqydr7sb1i5cqVSU1MVDAbVrl07dejQocY8LVq0UGJiYrVpJ06cUElJiWJjY2ut+8UXX0hS+Csf7du3r/b7YDCotm3b1nvcgwcP1vLlyzVt2jT16NFDknTTTTdp3rx5evrpp6sdW75SY8eO1RNPPKFQKKQ9e/boqaee0rhx47Rr1y716tVL0oXHv3///vCxw2+revyHDx/WgAEDdOONN2rx4sVKSUlRXFycPvzwQ02ePLnBvwJy//33a/r06dq+fbtGjRrVoOvyQ7T2469//WsVFhbq0KFD4TEPGDBAvXv31ve//33l5uYqIyOjXrWjsR9jY2O1YcMG/exnP9OQIUMkSfHx8Zo/f77mzZvn6f3Z2KK1J6u0b98+XHvIkCG67rrrNGPGDD3wwANKS0urV016siZfAjk1NVW33HLLJeep7S4o119/vdq2bau333671mUSEhIkKdxQx48fr/aAKyoqPH0/U5IyMjI0YcIE7du3T02bNlXPnj21YMECBQIBDRgwoN51k5KSws9J//79lZqaqkGDBmnq1Klat26dpAuPv3nz5hc9vnH99ddLkvLy8nTmzBmtWbNGycnJ4d8XFhbWe3z14cK9l+siWvuxsLBQnTp1qvFhfeutt0qSPvnkk3rXjtZ+7Nmzp7Zt26ajR4/q5MmT6tGjh0pLS/X4449r4MCBvq+voURrT17MbbfdJunCdRzqG8j0ZE0NclJXXQ0bNkyvv/66Kisrdfvtt190vqqD7Lm5ufre974Xnv7GG2/4cnP3YDAYPmGmtLRUL730kkaMGFHthfVqwIAB+vnPf64VK1Zo27Zt6t+/v4YNG6b58+erbdu26tat20WXrXqjfvNEAjPTsmXLfBvfpaxYsUKSfDvBzVWR7seOHTvqv/7rv3T06NFqH6rbtm2TJF/v7Rtt/dipU6fwczJz5kzFx8frF7/4RYOtzxWR7smLyc/Pl3QhnPxCT6phvof8bRkZGRYfH19jekVFhQ0dOtTatGlj2dnZtmHDBtu0aZPl5ORYRkZGtWOW999/f/iYwcaNG+13v/uddezY0RITE+t9wsKJEycsKyvL3nrrLXvvvfdsyZIllpKSYt27d7ejR49Wmzc/P98k2Zw5cy5bV7V8x87M7PDhwxYXF2eDBw82M7PTp09bWlqade7c2V544QV799137Z133rFly5bZmDFjwsc9Pv30U4uNjbX09HRbv369rVmzxu655x7r1auXSbL8/PzwOrycsLBlyxb74Q9/aEuXLrWNGzfa2rVr7eGHH7aYmBj7/ve/HzUndUVrP+7cudNiY2MtNTXVVqxYYe+99569+OKLdsMNN1i7du3s888/D897LfSjmdmvf/1rW7FiheXn59vrr79uo0ePtiZNmlhubu5ll3VBtPfk7NmzbdKkSZabm2sFBQWWl5dnDz30kMXExNiYMWOqzUtPeu/JiAay2YWTDp5//nm7+eabLS4uzlq2bGm9e/e2SZMm2b59+8Lzff311zZt2jS74YYbLC4uzu644w7btm1brV96T05OrtNB+y+//NKGDBliSUlJ1rRpU+vatas99thj1T74qvznf/6nSbKlS5detu7Fms3M7IknnjBJtnnzZjO70HAzZ860G2+80WJjY61Vq1bWp08fmzp1avgMzKr1Vz1HnTp1sieeeMI2bNhQp2abM2dOjflqs2/fPvvxj39snTp1smbNmllcXJz16dPHnnvuOU9n+TaWaO9HswsnpowaNco6d+5szZo1s+7du9u///u/2+HDh6vNdy30o9mFD8oePXpYs2bNrHXr1vajH/3ItmzZctnlXBHtPbl27Vr7wQ9+YO3atbNgMGgtW7a02267zV588cUaJxnSk94FzMy8bWNfG7KysrRq1Srt27fP1ws0APVBP8I19KR30XGWjgPy8/M1a9YsGg1OoB/hGnrSO7aQAQBwAFvIAAA4gEAGAMABBDIAAA4gkAEAcECdrtR1/vx5HTt2TAkJCbVe3g3XNjNTWVmZOnbs2CiX16QfcSn0I1xyJf1Yp0A+duyYunTp4svgcPUqLi729fKOF0M/oi7oR7ikLv1Yp0CuuoB5cXFxjbuRNLYFCxZ4rrF161bPNQ4fPuy5RteuXT3XWLhwoeca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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Get the predictions for the test data\n", "predictions = model.predict(X_test)\n", @@ -478,13 +649,118 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# Your code here - copy the relevant parts from the previous section and add more cells as needed" ] }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "keras.optimizers.optimizer_v2.gradient_descent.SGD" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimizers.SGD" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_6\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " dense_18 (Dense) (None, 64) 4160 \n", + " \n", + " dense_19 (Dense) (None, 64) 4160 \n", + " \n", + " dense_20 (Dense) (None, 10) 650 \n", + " \n", + "=================================================================\n", + "Total params: 8,970\n", + "Trainable params: 8,970\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 1.2358 - accuracy: 0.6625\n", + "Epoch 2/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.3143 - accuracy: 0.9088\n", + "Epoch 3/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.1529 - accuracy: 0.9562\n", + "Epoch 4/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.1115 - accuracy: 0.9617\n", + "Epoch 5/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0970 - accuracy: 0.9687\n", + "Epoch 6/15\n", + "45/45 [==============================] - 0s 997us/step - loss: 0.0659 - accuracy: 0.9777\n", + "Epoch 7/15\n", + "45/45 [==============================] - 0s 975us/step - loss: 0.0804 - accuracy: 0.9736\n", + "Epoch 8/15\n", + "45/45 [==============================] - 0s 952us/step - loss: 0.0290 - accuracy: 0.9896\n", + "Epoch 9/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0166 - accuracy: 0.9965\n", + "Epoch 10/15\n", + "45/45 [==============================] - 0s 986us/step - loss: 0.0114 - accuracy: 0.9972\n", + "Epoch 11/15\n", + "45/45 [==============================] - 0s 997us/step - loss: 0.0206 - accuracy: 0.9916\n", + "Epoch 12/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0080 - accuracy: 0.9993\n", + "Epoch 13/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0041 - accuracy: 0.9993\n", + "Epoch 14/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0028 - accuracy: 1.0000\n", + "Epoch 15/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 0.0021 - accuracy: 1.0000\n" + ] + } + ], + "source": [ + "from tensorflow.keras.optimizers import SGD\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()\n", + "\n", + "#decrease the learning rate\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate=0.01, momentum=0.9),\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "\n", + "history = model.fit(X_train, y_train, epochs=15, batch_size=32)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -500,13 +776,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# Your code here" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -520,9 +803,35 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "predictions_tf = model(X_test)\n", "predictions_tf[:5]" @@ -530,9 +839,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(tensorflow.python.framework.ops.EagerTensor, TensorShape([360, 10]))" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "type(predictions_tf), predictions_tf.shape" ] @@ -546,9 +866,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import tensorflow as tf\n", "\n", @@ -573,9 +906,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "predicted_labels_tf = tf.argmax(predictions_tf, axis=1)\n", "predicted_labels_tf[:5]" @@ -592,11 +936,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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kAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgATapqenp/9/f+jkyZOxePHimJiYiM7OztnYqyX09PQUz+jr6yueUXpT+dk+H5nO4+joaPGMKm7E/uSTTxbP2LZtW/GMDFr5PGZRxdfF2rVri2f09vYWzxgaGir6+JmcD6+QASABQQaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIoL3uBWZqZGSkeEaj0SieUcUNuI8cOVI8o4obcHPu9uzZU/cKERHR19dX9wokkOX6ODQ0VDxjYmKieMamTZuKZ8wmr5ABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEigve4FZqqKG04fOXKkfJEK9Pf3F8/o7e0tX4RzVsWN2Ddv3lw8o6urq3gGc18V14OJiYnyRSpQxddFX19f+SKzyCtkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgASauh/y9PR0REScPHnyvC7TjKmpqbpXqMzp06eLZ2T4nJzd4ew5Od8yncd//vOfxTM+++yz4hkZnossWvk8ztbfeTZcKF8XMzmPbdNN/Kn33nsvuru7yzfjgjY2NhbLly8/74/jPNIM55FMmjmPTQV5amoqxsfHo6OjI9ra2ipbkAvD9PR0TE5OxtKlS2PevPP/XRDnkS/jPJLJTM5jU0EGAM4vP9QFAAkIMgAkIMgAkIAgA0ACgtykP/zhD3HnnXfG17/+9bjkkkti2bJlsXHjxvjTn/5U92q0oJGRkdiwYUOsWLEiFi5cGJdddllce+21sXfv3rpXowX19fVFW1vbf/3fG2+8UfeKc4Kfsm7SLbfcEh999FHccsstcdVVV8WHH34YTzzxRLz55ptx8ODB+M53vlP3irSQ4eHhePHFF+Nb3/pWLFu2LE6dOhX79u2LF198MXbu3Bnbt2+ve0VayN///vf48MMPv/DPb7755liwYEEcOXIkLrrooho2m1sEuUnHjh2Lr371q//xzz755JP42te+FqtXr47f//73NW0G/2v9+vUxPj4eR48erXsVWtyhQ4eit7c3tm/fHjt37qx7nTnBW9ZN+r9jHBGxaNGiuOqqq2JsbKyGjeCLLr/88mhvb+o34sJ5tWvXrmhra4s777yz7lXmDF+5BSYmJuLPf/6zt6upzdTUVExNTcWJEydi//79cfDgwXjmmWfqXosWNzExES+//HLccMMNsWrVqrrXmTMEucAPf/jDOHXqVPzkJz+pexVa1H333RfPPvtsRETMnz8/nn766bjnnntq3opW98ILL8Snn34ad911V92rzCm+h3yOHn300Xjsscfil7/8Zdx///11r0OLOnr0aBw7diyOHTsWr7zySjz33HPx+OOPx4MPPlj3arSwa665Jg4fPhzvv/9+LFiwoO515gyvkM/Bjh074rHHHouf/exnYkytVqxYEStWrIiIiJtuuikiIh5++OHYvHlzLFmypM7VaFFvv/12vPnmm7F161YxniE/1DVDO3bsiIGBgRgYGIhHHnmk7nXgP6xbty7OnDkT7777bt2r0KJ27doVERFbtmypeZO5R5BnYOfOnTEwMBDbt2+P/v7+uteBL3jttddi3rx5ceWVV9a9Ci3o9OnTsXfv3li3bl2sXr267nXmHG9ZN+mJJ56In/70p/Hd7343NmzY8IXfPLN+/fqaNqMV3X333dHZ2Rnr1q2LK664Io4fPx779++Pl156KR566CFvV1OLoaGh+Pjjj706Pkd+qKtJvb29cejQof/67z2NzKbdu3fH7t2745133olGoxGLFi2KNWvWxJYtW+K2226rez1a1I033hivv/56fPDBB9HR0VH3OnOOIANAAr6HDAAJCDIAJCDIAJCAIANAAoIMAAkIMgAk0NQvBpmamorx8fHo6OiItra2870Tc8z09HRMTk7G0qVLY9688//feM4jX8Z5JJOZnMemgjw+Ph7d3d2VLMeFa2xsLJYvX37eH8d5pBnOI5k0cx6bCvLZ37gyNjYWnZ2d5ZsVePXVV4tnfO973yueUcXzUMXf5eqrry6eUerkyZPR3d09a7+ZJ9N5/PnPf148Y9++fcUzJiYmimf84he/KJ7x/e9/v3hGqVY+j41Go3hGFdelKs70H//4x+IZ9957b/GMxx9/vOjjZ3Iemwry2bdhOjs7az9wF198ca2Pf1YVb00tWrSoeEbdn49/N1tv12U6j1XcXq6K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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Get the values corresponding to the predicted labels for each sample\n", "predicted_values_tf = tf.reduce_max(predictions_tf, axis=1)\n", @@ -652,7 +1007,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -679,9 +1034,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers" ] @@ -695,18 +1063,70 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers[0].weights" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.00015817, -0.01590087, 0.00103594, ..., 0.00962818,\n", + " 0.00624957, 0.00994726],\n", + " [ 0.0081879 , 0.00756818, -0.00668142, ..., 0.01084459,\n", + " -0.00317478, -0.00549116],\n", + " [-0.00086618, -0.00287623, 0.00391693, ..., 0.00064558,\n", + " -0.00420471, 0.00174566],\n", + " ...,\n", + " [-0.0029006 , -0.0091218 , 0.00804327, ..., -0.01407086,\n", + " 0.00952832, -0.01348555],\n", + " [ 0.00375078, 0.00967842, 0.00098119, ..., -0.00413454,\n", + " 0.01695471, 0.00025196],\n", + " [ 0.00459809, 0.01223094, -0.00213172, ..., 0.01246831,\n", + " -0.00714749, -0.00868595]], dtype=float32)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "w = model.layers[0].weights[0].numpy()\n", "w" @@ -714,18 +1134,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0.008835949" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "w.std()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([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.,\n", + " 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.], dtype=float32)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "b = model.layers[0].weights[1].numpy()\n", "b" @@ -733,9 +1178,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 2.2868 - accuracy: 0.2213\n", + "Epoch 2/15\n", + "45/45 [==============================] - 0s 1ms/step - loss: 1.7145 - accuracy: 0.4836\n", + "Epoch 3/15\n", + "45/45 [==============================] - 0s 952us/step - loss: 1.0650 - accuracy: 0.6848\n", + "Epoch 4/15\n", + "45/45 [==============================] - 0s 952us/step - loss: 0.5733 - accuracy: 0.8643\n", + "Epoch 5/15\n", + "45/45 [==============================] - 0s 929us/step - loss: 0.3385 - accuracy: 0.9130\n", + "Epoch 6/15\n", + "45/45 [==============================] - 0s 929us/step - loss: 0.2438 - accuracy: 0.9388\n", + "Epoch 7/15\n", + "45/45 [==============================] - 0s 930us/step - loss: 0.2149 - accuracy: 0.9422\n", + "Epoch 8/15\n", + "45/45 [==============================] - 0s 884us/step - loss: 0.1312 - accuracy: 0.9652\n", + "Epoch 9/15\n", + "45/45 [==============================] - 0s 884us/step - loss: 0.1082 - accuracy: 0.9736\n", + "Epoch 10/15\n", + "45/45 [==============================] - 0s 907us/step - loss: 0.1033 - accuracy: 0.9770\n", + "Epoch 11/15\n", + "45/45 [==============================] - 0s 884us/step - loss: 0.0698 - accuracy: 0.9875\n", + "Epoch 12/15\n", + "45/45 [==============================] - 0s 929us/step - loss: 0.0477 - accuracy: 0.9937\n", + "Epoch 13/15\n", + "45/45 [==============================] - 0s 929us/step - loss: 0.0408 - accuracy: 0.9937\n", + "Epoch 14/15\n", + "45/45 [==============================] - 0s 929us/step - loss: 0.0313 - accuracy: 0.9972\n", + "Epoch 15/15\n", + "45/45 [==============================] - 0s 952us/step - loss: 0.0282 - accuracy: 0.9951\n" + ] + }, + { + "data": { + "image/png": "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ibrmmmt0xRVXWF0KAmzJkiVKT0/XL37xC8XHx6t///565ZVXrC4LAXTRRRfpP//5j3bv3i1J2rp1qz777DNdffXVFleGxpCRkaHs7Oxqn72cTqcuueQSPnsFqby8PBmGwRVGQcTr9er222/Xgw8+qLS0NKvLOSsOqwsIBrm5ufJ4PEpISKjWnpCQoOzsbIuqQmMwTVNTpkzRRRddpN69e1tdDgLovffe06ZNm7R+/XqrS0Ej+OabbzRnzhxNmTJFjzzyiNatW6f77rtPTqdTY8aMsbo8BMC0adOUl5enc889V3a7XR6PR3/84x918803W10aGkHl56vaPnvt37/fipLQiIqLi/Xwww/rlltuUUxMjNXlIECefvppORwO3XfffVaXctYI1QFkGEa1x6Zp1mhDyzZp0iRt27ZNn332mdWlIIAOHDig+++/X5988onCwsKsLgeNwOv1Kj09XU899ZQkqX///tq+fbvmzJlDqA4S77//vhYsWKB33nlHaWlp2rJliyZPnqzk5GTdcccdVpeHRsJnr+BXVlamm266SV6vV7Nnz7a6HATIxo0b9fzzz2vTpk1B8TfL5d8B0K5dO9nt9hq90jk5OTW+QUXLde+992rJkiVatmyZOnbsaHU5CKCNGzcqJydHAwcOlMPhkMPh0IoVK/TCCy/I4XDI4/FYXSLOUlJSknr16lWtrWfPnkwmGUQefPBBPfzww7rpppvUp08f3X777XrggQeY1yRIJSYmShKfvYJcWVmZRo8erYyMDC1dupRe6iCyatUq5eTkqFOnTv7PXvv379evf/1rdenSxery6o1QHQChoaEaOHCgli5dWq196dKlGjp0qEVVIVBM09SkSZP0wQcf6L///a9SU1OtLgkBdvnll+vLL7/Uli1b/Lf09HTdeuut2rJli+x2u9Ul4ixdeOGFNZbC2717tzp37mxRRQi0wsJC2WzVP9bY7XaW1ApSqampSkxMrPbZq7S0VCtWrOCzV5CoDNR79uzRp59+qri4OKtLQgDdfvvt2rZtW7XPXsnJyXrwwQf18ccfW11evXH5d4BMmTJFt99+u9LT0zVkyBDNnTtXmZmZmjBhgtWl4SxNnDhR77zzjv7+978rOjra/624y+VSeHi4xdUhEKKjo2uMkY+MjFRcXBxj54PEAw88oKFDh+qpp57S6NGjtW7dOs2dO1dz5861ujQEyMiRI/XHP/5RnTp1UlpamjZv3qznnntO48aNs7o0NNDx48e1d+9e/+OMjAxt2bJFbdu2VadOnTR58mQ99dRT6t69u7p3766nnnpKERERuuWWWyysGnV1uvObnJysG264QZs2bdI//vEPeTwe/+evtm3bKjQ01KqyUQ9n+hs++YuSkJAQJSYmqkePHk1d6tkzETAvvvii2blzZzM0NNQcMGCAuWLFCqtLQgBIqvX22muvWV0aGtEll1xi3n///VaXgQD6v//7P7N3796m0+k0zz33XHPu3LlWl4QAcrvd5v3332926tTJDAsLM7t27Wr+5je/MUtKSqwuDQ20bNmyWv//94477jBN0zS9Xq/52GOPmYmJiabT6TQvvvhi88svv7S2aNTZ6c5vRkbGKT9/LVu2zOrSUUdn+hs+WefOnc2//vWvTVpjoLBONQAAAAAADcSYagAAAAAAGohQDQAAAABAAxGqAQAAAABoIEI1AAAAAAANRKgGAAAAAKCBCNUAAAAAADQQoRoAAAAAgAYiVAMAAAAA0ECEagAAAAAAGohQDQAAAABAAxGqAQAAAABooP8POiZpGPS/tGsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "history = model.fit(X_train, y_train, epochs=15, batch_size=32)\n", "\n", @@ -753,9 +1245,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers[0].weights" ] @@ -783,7 +1317,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -794,7 +1328,7 @@ "metadata": { "file_extension": ".py", "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -808,7 +1342,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.9.15" }, "mimetype": "text/x-python", "name": "python",