File size: 72,793 Bytes
ec24a39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fcabc40a-cf5c-40f2-9290-d941c01ea3bc",
   "metadata": {},
   "source": [
    "# Main\n",
    "\n",
    "- This file implement the `utils` and `model` files. it start by loading train datasets, i.e `train_images` (60000, 28, 28, 1) , `train_labels` (60000, 10)\n",
    "- Model inputs of shape `(28, 28, 1)`\n",
    "- The optimizer algorithm in the project is `Adam` and loss of `CrossEntropy`\n",
    "- It train the model on 10 epochs on every 32 shuffled batches.\n",
    "- It visualize the loss and accuracy against epochs. \n",
    "- Then predict the using loaded test datasets and visualize the specified image by the user\n",
    "- The model Accuracy: `98.78%` and Loss: `0.04159`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "52ceb494-e077-446f-9057-5f8c80fd0c3d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load modules and dependencies\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import tensorflow as tf\n",
    "import pandas as pd\n",
    "\n",
    "from utils import *\n",
    "from model import *\n",
    "\n",
    "\n",
    "%matplotlib inline    \n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5216db96-7307-4884-9fd6-55e41e3da732",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train images shape (60000, 28, 28, 1)\n",
      "Train labels shape (60000, 10)\n"
     ]
    }
   ],
   "source": [
    "# Load train_datasets and train_lables\n",
    "train_images = load_image('datasets/train_dataset/train-images.idx3-ubyte')\n",
    "train_labels = load_label('datasets/train_dataset/train-labels.idx1-ubyte')\n",
    "print(f'Train images shape {train_images.shape}')\n",
    "print(f'Train labels shape {train_labels.shape}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "50c0af2b-925e-4883-a919-c336ed04cef7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define model params\n",
    "model = lenet_model((28, 28, 1))\n",
    "\n",
    "model.compile(\n",
    "    optimizer = 'adam',\n",
    "    loss = 'categorical_crossentropy',\n",
    "    metrics = ['accuracy']\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4b5eec8c-c7f0-45ad-8b7f-df2d3a1b15f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# reshaping into proper form for training\n",
    "train_label = tf.keras.utils.to_categorical(train_labels, num_classes=10)\n",
    "train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))\n",
    "train_datasets = train_dataset.shuffle(buffer_size=1024).batch(32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5581b2e9-632f-40d9-9761-5fd007de9bd3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 11ms/step - accuracy: 0.8901 - loss: 0.3858\n",
      "Epoch 2/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9707 - loss: 0.0936\n",
      "Epoch 3/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9811 - loss: 0.0604\n",
      "Epoch 4/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9855 - loss: 0.0463\n",
      "Epoch 5/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9893 - loss: 0.0358\n",
      "Epoch 6/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9911 - loss: 0.0295\n",
      "Epoch 7/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9919 - loss: 0.0254\n",
      "Epoch 8/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9935 - loss: 0.0204\n",
      "Epoch 9/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9943 - loss: 0.0184\n",
      "Epoch 10/10\n",
      "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 11ms/step - accuracy: 0.9941 - loss: 0.0179\n"
     ]
    }
   ],
   "source": [
    "# training model\n",
    "history = model.fit(train_datasets, epochs = 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a9470e38-b6cf-4dfb-b8dd-41fc6c410aa5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Vkmq8134TjdjqmpG1v9yc3OT1WqtMfaaa67Rf/7zHz366KNavny5VqxY4WiSbrfbz7quhIQErVq1SgcPHtTu3bv1/fffM0sKaKRodA4A/yMwMFCenp5KSUmp8drOnTtltVoVGhrqOOfv768RI0ZoxIgRKigo0BVXXKFJkybp7rvvdowJDw/Xgw8+qAcffFBpaWnq0aOHXnzxRb333nsNck8AAKD5W7hwoYKCgjR79uwary1btkwff/yx5syZo/DwcG3duvU3rxUeHq5169aprKxMLi4utY5p3bq1pMqd/H5t//79Z1zzli1blJqaqvnz5yshIcFx/tc7GUtytFT4vbol6bbbblNiYqLef/99nTx5Ui4uLho6dOgZ1wSg4TBTCgD+h5OTk6699lr961//0r59+xznMzMztWjRIl122WXy9fWVJB09erTae729vdW5c2eVlJRIkoqKilRcXFxtTHh4uHx8fBxjAAAAztfJkye1bNky/elPf9Itt9xS4xg9erTy8/P1ySefaPDgwfrpp5/08ccf17iOYRiSKncPzsnJ0axZs047pkOHDnJyctLq1aurvf7aa6+dcd1OTk7Vrln155dffrnauMDAQF1xxRWaO3eu0tPTa62nSkBAgK677jq99957WrhwoQYMGKCAgIAzrglAw2GmFIAWbe7cuUpKSqpxftKkSVqxYoUuu+wy3XvvvXJ2dtYbb7yhkpISPf/8845xXbp0Uf/+/dWrVy/5+/vrhx9+0IcffqjRo0dLklJTU3X11Vfr1ltvVZcuXeTs7KyPP/5YmZmZuu222xrsPgEAQPP2ySefKD8/X3/+859rff2SSy5RYGCgFi5cqEWLFunDDz/UkCFDdOedd6pXr146duyYPvnkE82ZM0cxMTFKSEjQu+++q8TERK1fv16XX365CgsL9dVXX+nee+/VjTfeKD8/Pw0ZMkSvvvqqLBaLwsPD9emnnyorK+uM646OjlZ4eLgeeughHTp0SL6+vvroo49q3SDmlVde0WWXXaaLL75Y99xzjzp27Kh9+/bpP//5jzZv3lxtbEJCgm655RZJ0pQpU878iwTQsMzc+g8AzDJv3jxD0mmPAwcOGJs2bTLi4+MNb29vw9PT07jqqquM7777rtp1nn76aaNv375Gq1atDA8PDyM6Otp45plnjNLSUsMwDCMnJ8e47777jOjo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sLAwubu7KzY2VuvXrz/t2G3btmnw4MEKCwuTxWLRzJkza4yZOnWq+vTpIx8fHwUFBemmm25SSkpKtTH9+/eXxWKpdvz973+v61trFiJOhVKHc4uVV1xmcjUAADQfbm5uyszMrHH+yJEjcnam7WdzUrXzHk3OAQCoztRQasmSJUpMTNTEiRO1adMmxcTEKD4+XllZWbWOLyoqUqdOnTRt2jQFBwfXOmbVqlW677779P3332vFihUqKyvTtddeq8LCwmrjRo4cqSNHjjiO559/vs7vrznw83BRsK+7JCktk75SAADUlWuvvVbjx49Xbm6u49yJEyf02GOP6ZprrjGxMtQ1ZkoBAFA7U38NN2PGDI0cOVIjRoyQJM2ZM0f/+c9/NHfuXI0bN67G+D59+qhPnz6SVOvrkpSUlFTt53feeUdBQUHauHGjrrjiCsd5T0/P0wZbqC7C5q2MvGKlZuarV4fWZpcDAECzMH36dF1xxRXq0KGDevbsKUnavHmzbDabFixYYHJ1qCtFZUXafWy3JHbeAwDgf5k2U6q0tFQbN25UXFzcL8VYrYqLi9PatWvr7HOqfvvo7+9f7fzChQsVEBCgbt26afz48SoqKvrN65SUlCgvL6/a0VJU9ZVKpa8UAAB1pl27dvr555/1/PPPq0uXLurVq5defvllbdmyRaGhoWaXhzqyPXu7DBkK9AxUkFeQ2eUAANComDZTKicnRxUVFbLZbNXO22w27dy5s04+w263a+zYsfrDH/6gbt1+WcP/l7/8RR06dFBISIh+/vlnPfroo0pJSdGyZctOe62pU6fqqaeeqpO6mppIQikAAOqFl5eX7rnnHrPLQD2q2nmPWVIAANTUrLto3nfffdq6davWrFlT7fyvH/66d++utm3b6uqrr9bu3bsVHh5e67XGjx+vxMREx895eXkt5reYkcFVoRQ9pQAAqGvbt29Xenq6SktLq53/85//bFJFqEuOJueBNDkHAOB/mRZKBQQEyMnJqcauM5mZmXXS62n06NH69NNPtXr1al1wwQW/OTY2NlaStGvXrtOGUm5ubnJzczvvupqiiCBvSVJ2fomOF5aqtZeryRUBAND07dmzR4MGDdKWLVtksVhkGIYkyWKxSJIqKirMLA91xNHknJlSAADUcE49pQ4cOKCDBw86fl6/fr3Gjh2rN99884yv4erqql69eik5Odlxzm63Kzk5Wf369TuXsiRJhmFo9OjR+vjjj/X111+rY8eOv/uezZs3S5Latm17zp/bnHm5OeuC1h6SWMIHAEBd+cc//qGOHTsqKytLnp6e2rZtm1avXq3evXtr5cqVZpeHOlI1U4qd9wAAqOmcQqm//OUv+uabbyRJGRkZuuaaa7R+/Xo9/vjjmjx58hlfJzExUW+99Zbmz5+vHTt2aNSoUSosLHTsxpeQkKDx48c7xpeWlmrz5s3avHmzSktLdejQIW3evFm7du1yjLnvvvv03nvvadGiRfLx8VFGRoYyMjJ08uRJSdLu3bs1ZcoUbdy4Ufv27dMnn3yihIQEXXHFFbrooovO5etoEegrBQBA3Vq7dq0mT56sgIAAWa1WWa1WXXbZZZo6daruv/9+s8tDHThadFRHCo5IkroEdjG5GgAAGp9zCqW2bt2qvn37SpI++OADdevWTd99950WLlyod95554yvM3ToUE2fPl0TJkxQjx49tHnzZiUlJTman6enp+vIkSOO8YcPH1bPnj3Vs2dPHTlyRNOnT1fPnj119913O8a8/vrrys3NVf/+/dW2bVvHsWTJEkmVM7S++uorXXvttYqOjtaDDz6owYMH69///ve5fBUtxi+hFH2lAACoCxUVFfLxqfz7NSAgQIcPH5YkdejQQSkpKWaWhjpStXSvY6uO8nHzMbkaAAAan3PqKVVWVubor/TVV185GnFGR0dXC5HOxOjRozV69OhaX/vfqethYWGOfgun83uvh4aGatWqVWdVI6RIW2VfqRRmSgEAUCe6deumn376SR07dlRsbKyef/55ubq66s0331SnTp3MLg91wLF0j35SAADU6pxmSnXt2lVz5szRt99+qxUrVmjAgAGSKmcytWnTpk4LRONQNVMqLTP/d4M/AADw+5544gnZ7XZJ0uTJk7V3715dfvnl+uyzz/TKK6+YXB3qwpbMyplS7LwHAEDtzmmm1HPPPadBgwbphRde0PDhwxUTEyNJ+uSTTxzL+tC8dA7yltUiHS8qU3ZBiYJ83M0uCQCAJi0+Pt7x586dO2vnzp06duyYWrdu7diBD00bO+8BAPDbzimU6t+/v3JycpSXl6fWrVs7zt9zzz3y9PSss+LQeLi7OKlDGy/tzSlUWmYBoRQAAOehrKxMHh4e2rx5s7p1+2UWjb+/v4lVoS4ZhuFYvtctiJlSAADU5pyW7508eVIlJSWOQGr//v2aOXOmUlJSFBQUVKcFovGICDrVVyqDvlIAAJwPFxcXtW/fXhUVFWaXgnqSnpuu/NJ8uVhdFNUmyuxyAABolM4plLrxxhv17rvvSpJOnDih2NhYvfjii7rpppv0+uuv12mBaDyigk/1lcoilAIA4Hw9/vjjeuyxx3Ts2DGzS0E9qJolFR0QLRcnF5OrAQCgcTqnUGrTpk26/PLLJUkffvihbDab9u/fr3fffZfGnM1YxKlm58yUAgDg/M2aNUurV69WSEiIoqKidPHFF1c70LRV9ZNi6R4AAKd3Tj2lioqK5ONTGVB8+eWXuvnmm2W1WnXJJZdo//79dVogGo8oxw58BTIMgyasAACch5tuusnsElCPHE3Og2hyDgDA6ZxTKNW5c2ctX75cgwYN0hdffKEHHnhAkpSVlSVfX986LRCNR8cALzlbLcovKdeR3GKFtPIwuyQAAJqsiRMnml0C6hFNzgEA+H3ntHxvwoQJeuihhxQWFqa+ffuqX79+kipnTfXs2bNOC0Tj4epsVccAL0lSaiZL+AAAAGpTVlGmHdk7JEndbcyUAgDgdM5pptQtt9yiyy67TEeOHFFMTIzj/NVXX61BgwbVWXFofCJtPkrLKlBqZr76R7HTIgAA58pqtf7mUnh25mu60o6lqcxeJm9Xb3Xw62B2OQAANFrnFEpJUnBwsIKDg3Xw4EFJ0gUXXKC+ffvWWWFonCJtPvrPliNKzSwwuxQAAJq0jz/+uNrPZWVl+vHHHzV//nw99dRTJlWFurAl85cm5/TgBADg9M4plLLb7Xr66af14osvqqCgMpzw8fHRgw8+qMcff1xW6zmtCkQTEGnzlsTyPQAAzteNN95Y49wtt9yirl27asmSJbrrrrtMqAp1gSbnAACcmXMKpR5//HG9/fbbmjZtmv7whz9IktasWaNJkyapuLhYzzzzTJ0WicYjMviXHfjsdkNWK7/9AwCgLl1yySW65557zC4D54Em5wAAnJlzCqXmz5+vf/7zn/rzn//sOHfRRRepXbt2uvfeewmlmrEO/p5ydbLqZFmFDh4/qfZtPM0uCQCAZuPkyZN65ZVX1K5dO7NLwXlgphQAAGfmnEKpY8eOKTo6usb56OhoHTt27LyLQuPl7GRVeJC3dhzJU2pmPqEUAADnqHXr1tX6DRmGofz8fHl6euq9994zsTKcj4LSAu05vkcSM6UAAPg95xRKxcTEaNasWXrllVeqnZ81a5YuuuiiOikMjVekrTKUSsnMV1wXm9nlAADQJL300kvVQimr1arAwEDFxsaqdevWJlaG87E9e7skyeZlU6BXoMnVAADQuJ1TKPX888/r+uuv11dffaV+/fpJktauXasDBw7os88+q9MC0fhE2qr6StHsHACAc3XHHXeYXQLqQdXOe91tLN0DAOD3nNM2eVdeeaVSU1M1aNAgnThxQidOnNDNN9+sbdu2acGCBXVdIxqZqlAqJbPA5EoAAGi65s2bp6VLl9Y4v3TpUs2fP9+EilAXqpqc008KAIDfd06hlCSFhITomWee0UcffaSPPvpITz/9tI4fP6633367LutDIxR1KpTanV2g8gq7ydUAANA0TZ06VQEBATXOBwUF6dlnnzWhItSFqibn9JMCAOD3nXMohZbrgtYe8nBxUmm5XfuPFZldDgAATVJ6ero6duxY43yHDh2Unp5uQkWoC+y8BwDAmSOUwlmzWi2KsHlLoq8UAADnKigoSD///HON8z/99JPatGljQkU4X1mFWcoqzJJFFnUJ7GJ2OQAANHqEUjgnEUGn+kpl0FcKAIBzMWzYMN1///365ptvVFFRoYqKCn399df6xz/+odtuu83s8nAOqvpJdWrdSV6uXiZXAwBA43dWu+/dfPPNv/n6iRMnzqcWNCFRwZUzpVKzmCkFAMC5mDJlivbt26err75azs6Vj2R2u10JCQn0lGqiHE3O2XkPAIAzclahlJ+f3+++npCQcF4FoWmIONXsPDWDUAoAgHPh6uqqJUuW6Omnn9bmzZvl4eGh7t27q0OHDmaXhnO0JfNUk/NAmpwDAHAmziqUmjdvXn3VgSamage+vTmFKi23y9WZlaAAAJyLiIgIRUREmF0G6oCjyTkzpQAAOCMkCTgnbf3c5ePmrHK7ob05hWaXAwBAkzN48GA999xzNc4///zzGjJkiAkV4XzYDbu2ZW+TJHULYqYUAABnglAK58Ri+WUHvlR24AMA4KytXr1aAwcOrHH+uuuu0+rVq02oCOdj/4n9KigtkKuTqyL8mfkGAMCZIJTCOYus6itFKAUAwFkrKCiQq6trjfMuLi7Ky8szoSKcj6om5xcGXCgXJxeTqwEAoGkglMI5I5QCAODcde/eXUuWLKlxfvHixerSpYsJFeF8VPWTYukeAABn7qwanQO/9ksoVWByJQAAND1PPvmkbr75Zu3evVt//OMfJUnJyclatGiRPvzwQ5Orw9lyNDkPosk5AABnilAK5ywyuLKn1P6jhSouq5C7i5PJFQEA0HTccMMNWr58uZ599ll9+OGH8vDwUExMjL7++mv5+/ubXR7OUtXyPWZKAQBw5li+h3MW6O2mVp4ushvSrixmSwEAcLauv/56/fe//1VhYaH27NmjW2+9VQ899JBiYmLMLg1nobSiVDtzdkqSutuYKQUAwJkilMI5s1gsjiV8aVn0lQIA4FysXr1aw4cPV0hIiF588UX98Y9/1Pfff292WTgLKTkpKreXy9fNV6G+oWaXAwBAk8HyPZyXSJu31u89ppQMZkoBAHCmMjIy9M477+jtt99WXl6ebr31VpWUlGj58uU0OW+Cfr10z2KxmFwNAABNBzOlcF6i2IEPAICzcsMNNygqKko///yzZs6cqcOHD+vVV181uyycB5qcAwBwbpgphfMSQSgFAMBZ+fzzz3X//fdr1KhRioiIMLsc1AGanAMAcG6YKYXzUtVT6uDxkyosKTe5GgAAGr81a9YoPz9fvXr1UmxsrGbNmqWcnByzy8J5YKYUAADnhlAK58Xfy1UB3m6SpDR24AMA4Hddcskleuutt3TkyBH97W9/0+LFixUSEiK73a4VK1YoP//cZh/Pnj1bYWFhcnd3V2xsrNavX3/asWVlZZo8ebLCw8Pl7u6umJgYJSUl1Rh36NAh/fWvf1WbNm3k4eGh7t2764cffjin+pqr/JJ87TuxTxIzpQAAOFuEUjhvUcHekqTUDJbwAQBwpry8vHTnnXdqzZo12rJlix588EFNmzZNQUFB+vOf/3xW11qyZIkSExM1ceJEbdq0STExMYqPj1dWVlat45944gm98cYbevXVV7V9+3b9/e9/16BBg/Tjjz86xhw/flx/+MMf5OLios8//1zbt2/Xiy++qNatW5/XfTc327K3SZLaerdVG882JlcDAEDTQiiF8xZJXykAAM5LVFSUnn/+eR08eFDvv//+Wb9/xowZGjlypEaMGKEuXbpozpw58vT01Ny5c2sdv2DBAj322GMaOHCgOnXqpFGjRmngwIF68cUXHWOee+45hYaGat68eerbt686duyoa6+9VuHh4ed8n83RlsxTS/dsLN0DAOBsEUrhvFWFUimEUgAAnBcnJyfddNNN+uSTT874PaWlpdq4caPi4uIc56xWq+Li4rR27dpa31NSUiJ3d/dq5zw8PLRmzRrHz5988ol69+6tIUOGKCgoSD179tRbb711lnfU/FU1OaefFAAAZ49QCuetKpRKy6SnFAAADS0nJ0cVFRWy2WzVzttsNmVkZNT6nvj4eM2YMUNpaWmOXlbLli3TkSNHHGP27Nmj119/XREREfriiy80atQo3X///Zo/f/5paykpKVFeXl61o7mranJOPykAAM4eoRTOW4StsqdURl6xck+WmVwNAAD4PS+//LIiIiIUHR0tV1dXjR49WiNGjJDV+sujod1u18UXX6xnn31WPXv21D333KORI0dqzpw5p73u1KlT5efn5zhCQ0Mb4nZMYxgGO+8BAHAeCKVw3nzdXRTiV7kEII0lfAAANKiAgAA5OTkpMzOz2vnMzEwFBwfX+p7AwEAtX75chYWF2r9/v3bu3Clvb2916tTJMaZt27bq0qVLtfddeOGFSk9PP20t48ePV25uruM4cODAedxZ45dVmKWcohxZZNGFgReaXQ4AAE0OoRTqRAR9pQAAMIWrq6t69eql5ORkxzm73a7k5GT169fvN9/r7u6udu3aqby8XB999JFuvPFGx2t/+MMflJKSUm18amqqOnTocNrrubm5ydfXt9rRnFXNkurs31meLp4mVwMAQNNjeig1e/ZshYWFyd3dXbGxsVq/fv1px27btk2DBw9WWFiYLBaLZs6ceU7XLC4u1n333ac2bdrI29tbgwcPrvHbRZydqGD6SgEAYJbExES99dZbmj9/vnbs2KFRo0apsLBQI0aMkCQlJCRo/PjxjvHr1q3TsmXLtGfPHn377bcaMGCA7Ha7HnnkEceYBx54QN9//72effZZ7dq1S4sWLdKbb76p++67r8Hvr7Fi5z0AAM6PqaHUkiVLlJiYqIkTJ2rTpk2KiYlRfHy8srKyah1fVFSkTp06adq0aaedjn4m13zggQf073//W0uXLtWqVat0+PBh3XzzzfVyjy1FRFBlX6mUDGZKAQDQ0IYOHarp06drwoQJ6tGjhzZv3qykpCRH8/P09PRqTcyLi4v1xBNPqEuXLho0aJDatWunNWvWqFWrVo4xffr00ccff6z3339f3bp1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",
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_loss_acc = pd.DataFrame(history.history)\n",
    "df_loss = df_loss_acc['loss']\n",
    "df_acc = df_loss_acc['accuracy']\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))\n",
    "\n",
    "# Plotting loss\n",
    "df_loss.plot(ax=ax1, title='Loss')\n",
    "ax1.set_xlabel('Epochs')\n",
    "ax1.set_ylabel('Loss')\n",
    "\n",
    "# Plotting accuracy\n",
    "df_acc.plot(ax=ax2, title='Accuracy', color='g')\n",
    "ax2.set_xlabel('Epochs')\n",
    "ax2.set_ylabel('Accuracy')\n",
    "\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "24b74e6b-fbae-4957-be51-e6fbf9f23664",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load test datasets\n",
    "test_images = load_image('datasets/test_dataset/t10k-images.idx3-ubyte')\n",
    "test_labels = load_label('datasets/test_dataset/t10k-labels.idx1-ubyte')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "48fa1a8d-83c9-4ce3-a1fa-9eec369d3808",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step\n"
     ]
    }
   ],
   "source": [
    "# predict the test images\n",
    "prediction = model.predict(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8b24c43a-7813-4b17-a251-e0a1239ee06a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.9809 - loss: 0.0665\n",
      "Model accuracy: 0.984499990940094 \n",
      "Loss: 0.05619188770651817\n"
     ]
    }
   ],
   "source": [
    "test_loss, test_accuracy = model.evaluate(test_images, test_labels)\n",
    "print(f'Model accuracy: {test_accuracy} \\nLoss: {test_loss}')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b2170154-977d-40d9-839a-57628dd923a5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# extract the index of max probability \n",
    "pred_class = np.argmax(prediction, axis =1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "842d8096-eda5-4815-aeab-2c6a1c0ddab5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGrCAYAAADn6WHYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAANqElEQVR4nO3cW4iW1cPG4TVqk9tQh3aelViYEZUSStaYB3kwEgiVEhJRlqVkEEZQUoYIeVKEhZmUQhuCtINAcQNZpIYYCAZZUBBhCqWlWSlm835HXyBlzbv+98w443VBB45zz1q28deT+bQ0Go1GAYD/0YDevgAA/YOgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgwD+YNm1amTZtWm9fA/oUQaHfWbduXWlpaSmfffbZXx/btGlTWbp0aa/d6fXXXy/jx48vgwcPLuPGjSsrV67stbtAdxEUzgubNm0qzz33XJc/f+vWrWXr1q2Rs1evXl3mzZtXJkyYUFauXFmmTJlSFi1aVFasWBH5+nCuGNTbF4BzUWtra+TrnDhxojz99NOlo6OjrF+/vpRSyoMPPlg6OzvLsmXLykMPPVRGjRoVOQt6mycU+r377ruvvPLKK6WUUlpaWv7649/806+hrFy5skyYMKEMHTq0jBo1qkyaNKm88847//p1tm/fXo4cOVIWLFhwxscXLlxYfvvtt7Jx48bmf0BwjvKEQr83f/78cvDgwbJt27by5ptvVn2NNWvWlEWLFpU777yzPPbYY+XkyZNl3759Zffu3eWee+45627v3r2llFImTZp0xscnTpxYBgwYUPbu3Vvmzp1bdSc41wgK/d6UKVPKVVddVbZt21b9k/fGjRvLhAkTynvvvdfU7tChQ2XgwIHlkksuOePjra2tpa2trRw8eLDqPnAu8p+8oAtGjhxZDhw4UPbs2dPU7sSJE2f99ZjBgweXEydOJK4H5wRBgS548skny/Dhw8tNN91Uxo0bVxYuXFh27tz5n7shQ4aUU6dO/eP3nTx5sgwZMiR9Veg1ggJdMH78+PLVV1+Vd999t0ydOrVs2LChTJ06tTz77LP/urv88svLn3/+WX744YczPn7q1Kly5MiRMmbMmO68NvQoQeG88F//V1dXDBs2rMyePbusXbu2fPfdd6Wjo6MsX768nDx58qyb66+/vpRSzvhNlv//7c7Ozr++H/oDQeG8MGzYsFJKKUePHq3aHzly5Ixvt7a2lmuuuaY0Go3yxx9/nHU3ffr0Mnr06LJq1aozPr5q1aoydOjQ0tHRUXUfOBf5v7w4L0ycOLGUUsqiRYvKjBkzysCBA8ucOXO6vL/99tvLZZddVm6++eZy6aWXlv3795eXX365dHR0lBEjRpx1N2TIkLJs2bKycOHCctddd5UZM2aUTz75pLz11ltl+fLlZfTo0f/zjw3OGQ3oZ9auXdsopTT27Nnz18dOnz7dePTRRxsXX3xxo6WlpfFff+u3t7c32tvb//r26tWrG7feemujra2tceGFFzbGjh3beOKJJxrHjh3r0p1ee+21xtVXX91obW1tjB07tvHiiy82Ojs7q358cK5qaTQajd6OGgB9n19DASBCUACIEBQAIgQFgAhBASBCUACIEBQAIrr8O+UT70ICoG/qym9Z9IQCQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAxqLcvAFOnTq3affrpp1W7q6++uunNzJkzq87q6Oio2m3cuLFqV2PXrl1Vux07doRvQl/nCQWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWAiJZGo9Ho0ie2tHT3XTiHXHTRRU1v3n777aqzpk+fXrU7ceJE1a61tbXpzfDhw6vO6gtq/zz+/vvvVbtHHnmkard+/fqqHRldSYUnFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIjwckj+0apVq5rezJ8/vxtukrd///6mNz/++GPVWb/88kvVrlbNP6cdHR3dcJOzO378eNXulltuaXqzb9++qrP4Oy+HBKDHCAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABEeNtwPzdhwoSq3UcffdT0pq2treqsAwcOVO3uvffeqt3XX3/d9Obo0aNVZ/36669Vu1oDBjT/74jPPPNM1VlLliyp2g0cOLBq9/777ze9mTdvXtVZP//8c9WuP/O2YQB6jKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAxKDevgDda8SIEVW7mjcHd/HF1X+zYsWKql3NG5H7u87OzqY3S5curTqrtbW1ard48eKq3axZs5revPHGG1Vnbdy4sWp3vvOEAkCEoAAQISgARAgKABGCAkCEoAAQISgARAgKABGCAkCEoAAQISgARAgKABGCAkBES6OLr4htaWnp7rvQDdrb26t227dvb3qzbt26qrPuv//+qh190zfffFO1u+KKK5rerF27tuqsBx54oGrXn3UlFZ5QAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIGJQb1+A7rVs2bIeO2v37t09dhZ915YtW6p2Dz/8cNObyZMnV51FHU8oAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAER423AfceWVV1btxowZU7U7duxY05vPP/+86izOLx9++GHVruZtw/QsTygARAgKABGCAkCEoAAQISgARAgKABGCAkCEoAAQISgARAgKABGCAkCEoAAQISgARHjbcB8xd+7cql3tW4o3bNjQ9GbXrl1VZwH9gycUACIEBYAIQQEgQlAAiBAUACIEBYAIQQEgQlAAiBAUACIEBYAIQQEgQlAAiBAUACK8bbiPmDNnTtXu2LFjVbuXXnqpagecvzyhABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISXQ/ZzX375ZdVux44d4ZsA/Z0nFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAivG24hw0bNqxqd8EFF4RvApDlCQWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACG8b7mF333131W7s2LFVu8OHD1ftoLvccccdPXbW6dOne+wsPKEAECIoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAEOFtw0CViRMnVu1mzpwZvsnZPfXUUz12Fp5QAAgRFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIMLLIeE8V/uSx8cff7xqN3LkyKrdzp07m95s2bKl6izqeEIBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIMLbhnvYt99+W7U7fvx49iL0SwMHDmx6s3jx4qqzZs+eXbX7/vvvq3Y19zx9+nTVWdTxhAJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAREuj0Wh06RNbWrr7LvyLL774omrXxb+8f9Pe3t705vDhw1Vn9WfXXXdd1W7BggVVuxtvvLHpzaRJk6rOqnXbbbdV7T7++OPwTWhGV34u8YQCQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQISgABAhKABECAoAEYICQMSg3r4A3Wv8+PFVu82bNze9OXToUNVZ/dnkyZOrdm1tbeGbnF3tW6I/+OCDqt2ePXuqdpz7PKEAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAREuj0Wh06RNbWrr7LvyLWbNmVe2WLFlStbvhhhuqdmR0dnZW7X766aemNy+88ELVWc8//3zVjr6pK6nwhAJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhKAAECEoAEQICgARggJAhLcN93Njxoyp2m3evLnpzbXXXlt1Vn+2Zs2aqt3evXurdq+++mrVDv6Ltw0D0GMEBYAIQQEgQlAAiBAUACIEBYAIQQEgQlAAiBAUACIEBYAIQQEgQlAAiBAUACK8bRiA/+RtwwD0GEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIEJQAIgQFAAiBAWACEEBIGJQVz+x0Wh05z0A6OM8oQAQISgARAgKABGCAkCEoAAQISgARAgKABGCAkCEoAAQ8X8TQBa2hXnaYwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# display image and predicted label from the model\n",
    "image_show(test_images, pred_class, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "683c5d0b-4085-4c6f-9ab5-082c37160a8f",
   "metadata": {},
   "source": [
    "# References:\n",
    "The idea presented from this notebook derived from:-\n",
    "- [LeCun et al., 1998a] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. \"Gradient-based learning applied to document recognition.\" Proceedings of the IEEE, 86(11):2278-2324, November 1998. [follow this link.](https://yann.lecun.com/exdb/publis/index.html)\n",
    "- THE MNIST DATABASEof handwritten digits as [specified in this link.](https://yann.lecun.com/exdb/mnist/)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d0b2a634-df55-42f8-a6a2-71e9d78b3a04",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}