Mr00Magician commited on
Commit
b57bed9
1 Parent(s): 7fce9b8

added source code for training of CNN

Browse files
Files changed (1) hide show
  1. Training_CNN.ipynb +676 -0
Training_CNN.ipynb ADDED
@@ -0,0 +1,676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import tensorflow as tf\n",
10
+ "import numpy as np"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": 2,
16
+ "metadata": {},
17
+ "outputs": [],
18
+ "source": [
19
+ "(xtrain, ytrain), (xtest, ytest) = tf.keras.datasets.mnist.load_data()"
20
+ ]
21
+ },
22
+ {
23
+ "cell_type": "code",
24
+ "execution_count": 3,
25
+ "metadata": {},
26
+ "outputs": [
27
+ {
28
+ "data": {
29
+ "text/plain": [
30
+ "(60000, 28, 28)"
31
+ ]
32
+ },
33
+ "execution_count": 3,
34
+ "metadata": {},
35
+ "output_type": "execute_result"
36
+ }
37
+ ],
38
+ "source": [
39
+ "xtrain.shape"
40
+ ]
41
+ },
42
+ {
43
+ "cell_type": "code",
44
+ "execution_count": 4,
45
+ "metadata": {},
46
+ "outputs": [
47
+ {
48
+ "data": {
49
+ "text/plain": [
50
+ "(0, 255)"
51
+ ]
52
+ },
53
+ "execution_count": 4,
54
+ "metadata": {},
55
+ "output_type": "execute_result"
56
+ }
57
+ ],
58
+ "source": [
59
+ "xtrain.min(), xtrain.max()"
60
+ ]
61
+ },
62
+ {
63
+ "cell_type": "code",
64
+ "execution_count": 5,
65
+ "metadata": {},
66
+ "outputs": [
67
+ {
68
+ "data": {
69
+ "text/plain": [
70
+ "(10000, 28, 28, 1)"
71
+ ]
72
+ },
73
+ "execution_count": 5,
74
+ "metadata": {},
75
+ "output_type": "execute_result"
76
+ }
77
+ ],
78
+ "source": [
79
+ "xtrain_norm = xtrain.reshape(-1, 28, 28, 1)/255\n",
80
+ "xtest_norm = xtest.reshape(-1, 28, 28, 1)/255\n",
81
+ "xtest_norm.shape"
82
+ ]
83
+ },
84
+ {
85
+ "cell_type": "code",
86
+ "execution_count": 6,
87
+ "metadata": {},
88
+ "outputs": [
89
+ {
90
+ "data": {
91
+ "text/plain": [
92
+ "array([7, 2, 1, ..., 4, 5, 6], dtype=uint8)"
93
+ ]
94
+ },
95
+ "execution_count": 6,
96
+ "metadata": {},
97
+ "output_type": "execute_result"
98
+ }
99
+ ],
100
+ "source": [
101
+ "ytest"
102
+ ]
103
+ },
104
+ {
105
+ "cell_type": "code",
106
+ "execution_count": 10,
107
+ "metadata": {},
108
+ "outputs": [
109
+ {
110
+ "name": "stdout",
111
+ "output_type": "stream",
112
+ "text": [
113
+ "Epoch 1/2\n",
114
+ "1875/1875 [==============================] - 61s 32ms/step - loss: 0.1177 - accuracy: 0.9642\n",
115
+ "Epoch 2/2\n",
116
+ "1875/1875 [==============================] - 74s 39ms/step - loss: 0.0389 - accuracy: 0.9876\n"
117
+ ]
118
+ },
119
+ {
120
+ "data": {
121
+ "text/plain": [
122
+ "<keras.callbacks.History at 0x28f7df85dc0>"
123
+ ]
124
+ },
125
+ "execution_count": 10,
126
+ "metadata": {},
127
+ "output_type": "execute_result"
128
+ }
129
+ ],
130
+ "source": [
131
+ "# model0 = tf.keras.Sequential([\n",
132
+ "# tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu', input_shape = (28, 28, 1)),\n",
133
+ "# tf.keras.layers.MaxPool2D(),\n",
134
+ "\n",
135
+ "# tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),\n",
136
+ "# tf.keras.layers.MaxPool2D(),\n",
137
+ "\n",
138
+ "# tf.keras.layers.Flatten(),\n",
139
+ "# tf.keras.layers.Dense(128, activation = 'relu'),\n",
140
+ "# tf.keras.layers.Dense(10, activation = 'softmax')\n",
141
+ "# ])\n",
142
+ "# # callback = tf.keras.callbacks.TensorBoard(log_dir = f'/log/{}')\n",
143
+ "\n",
144
+ "# model0.compile(\n",
145
+ "# loss = tf.keras.losses.SparseCategoricalCrossentropy(),\n",
146
+ "# optimizer = tf.keras.optimizers.Adam(),\n",
147
+ "# metrics = ['accuracy']\n",
148
+ "# )\n",
149
+ "# model0.fit(xtrain_norm, ytrain, epochs = 2)"
150
+ ]
151
+ },
152
+ {
153
+ "cell_type": "code",
154
+ "execution_count": 11,
155
+ "metadata": {},
156
+ "outputs": [],
157
+ "source": [
158
+ "# model0.save('CNN.h5')"
159
+ ]
160
+ },
161
+ {
162
+ "cell_type": "code",
163
+ "execution_count": 9,
164
+ "metadata": {},
165
+ "outputs": [],
166
+ "source": [
167
+ "# model0.summary()"
168
+ ]
169
+ },
170
+ {
171
+ "cell_type": "markdown",
172
+ "metadata": {},
173
+ "source": [
174
+ "## Adding Right and Left Shifted images to the Dataset"
175
+ ]
176
+ },
177
+ {
178
+ "cell_type": "code",
179
+ "execution_count": 10,
180
+ "metadata": {},
181
+ "outputs": [],
182
+ "source": [
183
+ "import matplotlib.pyplot as plt\n",
184
+ "import numpy as np"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 11,
190
+ "metadata": {},
191
+ "outputs": [
192
+ {
193
+ "data": {
194
+ "text/plain": [
195
+ "<matplotlib.image.AxesImage at 0x1baf93a9b20>"
196
+ ]
197
+ },
198
+ "execution_count": 11,
199
+ "metadata": {},
200
+ "output_type": "execute_result"
201
+ },
202
+ {
203
+ "data": {
204
+ "image/png": "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1KFDh6yXZKqhoUHNzc0x50coFFJBQcEFeX5UVVUpIyNDV111lZYtW6ajR49aLymhwuGwJCktLU2StGfPHnV2dsacDxMmTNCYMWMG9flw5nH40ssvv6z09HRNnDhRZWVlOn78uMXyetXvbkZ6ps8++0xdXV3KzMyMeTwzM1N/+ctfjFZlo6CgQBUVFbrqqqvU1NSk1atX64YbbtD+/fuVkpJivTwTzc3NktTj+fHlcxeKuXPn6pZbblFeXp4OHjyon/70pyopKVFNTY2GDh1qvby46+7u1ooVKzR9+nRNnDhR0unzITk5WSNHjozZdzCfDz0dB0m64447NHbsWOXk5Gjfvn165JFHVFdXpzfeeMNwtbH6fYDwDyUlJdE/T548WQUFBRo7dqxef/113X333YYrQ39w2223Rf88adIkTZ48WePHj1dVVZVmz55tuLLEKC0t1f79+y+I90G/Tm/H4Z577on+edKkScrOztbs2bN18OBBjR8//nwvs0f9/q/g0tPTNXTo0LM+xdLS0qKsrCyjVfUPI0eO1JVXXqn6+nrrpZj58hzg/DjbuHHjlJ6ePijPj+XLl+utt97Se++9F/PrW7KysnTy5Em1trbG7D9Yz4fejkNPCgoKJKlfnQ/9PkDJycmaMmWKKisro491d3ersrJShYWFhiuzd+zYMR08eFDZ2dnWSzGTl5enrKysmPMjEolo165dF/z58emnn+ro0aOD6vxwzmn58uXasmWLduzYoby8vJjnp0yZoqSkpJjzoa6uTocOHRpU58O5jkNP9u7dK0n963yw/hTEN/Hqq6+6YDDoKioq3J/+9Cd3zz33uJEjR7rm5mbrpZ1XDz74oKuqqnINDQ3u97//vSsqKnLp6enuyJEj1ktLqLa2NvfRRx+5jz76yElyzz77rPvoo4/c3/72N+ecc0899ZQbOXKk27Ztm9u3b5+bN2+ey8vLc1988YXxyuPr645DW1ube+ihh1xNTY1raGhw7777rvv+97/vrrjiCnfixAnrpcfNsmXLXCgUclVVVa6pqSm6HT9+PLrPvffe68aMGeN27Njhdu/e7QoLC11hYaHhquPvXMehvr7e/exnP3O7d+92DQ0Nbtu2bW7cuHFu5syZxiuPNSAC5Jxza9eudWPGjHHJyclu2rRprra21npJ592iRYtcdna2S05Odt/97nfdokWLXH19vfWyEu69995zks7aFi9e7Jw7/VHsxx57zGVmZrpgMOhmz57t6urqbBedAF93HI4fP+7mzJnjRo0a5ZKSktzYsWPd0qVLB93/pPX0zy/Jbdy4MbrPF1984e677z73ne98x40YMcItWLDANTU12S06Ac51HA4dOuRmzpzp0tLSXDAYdJdffrn7yU9+4sLhsO3Cz8CvYwAAmOj37wEBAAYnAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMDE/wMbyQoYiK2gOwAAAABJRU5ErkJggg==",
205
+ "text/plain": [
206
+ "<Figure size 640x480 with 1 Axes>"
207
+ ]
208
+ },
209
+ "metadata": {},
210
+ "output_type": "display_data"
211
+ }
212
+ ],
213
+ "source": [
214
+ "plt.imshow(np.roll(xtrain[0], 5, axis = 1))"
215
+ ]
216
+ },
217
+ {
218
+ "cell_type": "code",
219
+ "execution_count": 27,
220
+ "metadata": {},
221
+ "outputs": [],
222
+ "source": [
223
+ "xtrain_shifted = np.roll(xtrain, 5, axis = 2)"
224
+ ]
225
+ },
226
+ {
227
+ "cell_type": "code",
228
+ "execution_count": 26,
229
+ "metadata": {},
230
+ "outputs": [
231
+ {
232
+ "data": {
233
+ "text/plain": [
234
+ "(60000, 28, 28, 1)"
235
+ ]
236
+ },
237
+ "execution_count": 26,
238
+ "metadata": {},
239
+ "output_type": "execute_result"
240
+ }
241
+ ],
242
+ "source": [
243
+ "xtrain_norm.shape"
244
+ ]
245
+ },
246
+ {
247
+ "cell_type": "code",
248
+ "execution_count": 28,
249
+ "metadata": {},
250
+ "outputs": [],
251
+ "source": [
252
+ "xtrain_new = np.insert(xtrain, 1, xtrain_shifted[0], axis = 0)"
253
+ ]
254
+ },
255
+ {
256
+ "cell_type": "code",
257
+ "execution_count": 35,
258
+ "metadata": {},
259
+ "outputs": [
260
+ {
261
+ "data": {
262
+ "text/plain": [
263
+ "<matplotlib.image.AxesImage at 0x213fed2cf10>"
264
+ ]
265
+ },
266
+ "execution_count": 35,
267
+ "metadata": {},
268
+ "output_type": "execute_result"
269
+ },
270
+ {
271
+ "data": {
272
+ "image/png": "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1KFDh6yXZKqhoUHNzc0x50coFFJBQcEFeX5UVVUpIyNDV111lZYtW6ajR49aLymhwuGwJCktLU2StGfPHnV2dsacDxMmTNCYMWMG9flw5nH40ssvv6z09HRNnDhRZWVlOn78uMXyetXvbkZ6ps8++0xdXV3KzMyMeTwzM1N/+ctfjFZlo6CgQBUVFbrqqqvU1NSk1atX64YbbtD+/fuVkpJivTwTzc3NktTj+fHlcxeKuXPn6pZbblFeXp4OHjyon/70pyopKVFNTY2GDh1qvby46+7u1ooVKzR9+nRNnDhR0unzITk5WSNHjozZdzCfDz0dB0m64447NHbsWOXk5Gjfvn165JFHVFdXpzfeeMNwtbH6fYDwDyUlJdE/T548WQUFBRo7dqxef/113X333YYrQ39w2223Rf88adIkTZ48WePHj1dVVZVmz55tuLLEKC0t1f79+y+I90G/Tm/H4Z577on+edKkScrOztbs2bN18OBBjR8//nwvs0f9/q/g0tPTNXTo0LM+xdLS0qKsrCyjVfUPI0eO1JVXXqn6+nrrpZj58hzg/DjbuHHjlJ6ePijPj+XLl+utt97Se++9F/PrW7KysnTy5Em1trbG7D9Yz4fejkNPCgoKJKlfnQ/9PkDJycmaMmWKKisro491d3ersrJShYWFhiuzd+zYMR08eFDZ2dnWSzGTl5enrKysmPMjEolo165dF/z58emnn+ro0aOD6vxwzmn58uXasmWLduzYoby8vJjnp0yZoqSkpJjzoa6uTocOHRpU58O5jkNP9u7dK0n963yw/hTEN/Hqq6+6YDDoKioq3J/+9Cd3zz33uJEjR7rm5mbrpZ1XDz74oKuqqnINDQ3u97//vSsqKnLp6enuyJEj1ktLqLa2NvfRRx+5jz76yElyzz77rPvoo4/c3/72N+ecc0899ZQbOXKk27Ztm9u3b5+bN2+ey8vLc1988YXxyuPr645DW1ube+ihh1xNTY1raGhw7777rvv+97/vrrjiCnfixAnrpcfNsmXLXCgUclVVVa6pqSm6HT9+PLrPvffe68aMGeN27Njhdu/e7QoLC11hYaHhquPvXMehvr7e/exnP3O7d+92DQ0Nbtu2bW7cuHFu5syZxiuPNSAC5Jxza9eudWPGjHHJyclu2rRprra21npJ592iRYtcdna2S05Odt/97nfdokWLXH19vfWyEu69995zks7aFi9e7Jw7/VHsxx57zGVmZrpgMOhmz57t6urqbBedAF93HI4fP+7mzJnjRo0a5ZKSktzYsWPd0qVLB93/pPX0zy/Jbdy4MbrPF1984e677z73ne98x40YMcItWLDANTU12S06Ac51HA4dOuRmzpzp0tLSXDAYdJdffrn7yU9+4sLhsO3Cz8CvYwAAmOj37wEBAAYnAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMDE/wMbyQoYiK2gOwAAAABJRU5ErkJggg==",
273
+ "text/plain": [
274
+ "<Figure size 640x480 with 1 Axes>"
275
+ ]
276
+ },
277
+ "metadata": {},
278
+ "output_type": "display_data"
279
+ }
280
+ ],
281
+ "source": [
282
+ "plt.imshow(xtrain_new[1])"
283
+ ]
284
+ },
285
+ {
286
+ "cell_type": "code",
287
+ "execution_count": 11,
288
+ "metadata": {},
289
+ "outputs": [],
290
+ "source": [
291
+ "xtrain_rshifted = np.roll(xtrain, 5, axis = 2)\n",
292
+ "xtrain_lshifted = np.roll(xtrain, -5, axis = 2)"
293
+ ]
294
+ },
295
+ {
296
+ "cell_type": "code",
297
+ "execution_count": 13,
298
+ "metadata": {},
299
+ "outputs": [],
300
+ "source": [
301
+ "# xtrain_new = xtrain.copy()\n",
302
+ "# i = j = 0\n",
303
+ "# while i < len(xtrain):\n",
304
+ "# np.insert(xtrain_new, j + 1, xtrain_lshifted[i], axis = 0)\n",
305
+ "# np.insert(xtrain_new, j + 2, xtrain_rshifted[i], axis = 0)\n",
306
+ "# j += 3\n",
307
+ "# i += 1"
308
+ ]
309
+ },
310
+ {
311
+ "cell_type": "code",
312
+ "execution_count": 18,
313
+ "metadata": {},
314
+ "outputs": [
315
+ {
316
+ "data": {
317
+ "text/plain": [
318
+ "array([ 1, 1, 2, ..., 59999, 60000, 60000])"
319
+ ]
320
+ },
321
+ "execution_count": 18,
322
+ "metadata": {},
323
+ "output_type": "execute_result"
324
+ }
325
+ ],
326
+ "source": [
327
+ "# index = np.array([[x + 1, x + 2] for x in range(0, len(xtrain), 3)])\n",
328
+ "# index = index.reshape(-1)\n",
329
+ "index = np.array([[x, x] for x in range(1, 60001)]).reshape(-1)\n",
330
+ "index"
331
+ ]
332
+ },
333
+ {
334
+ "cell_type": "code",
335
+ "execution_count": 19,
336
+ "metadata": {},
337
+ "outputs": [],
338
+ "source": [
339
+ "values = np.array([[xtrain_lshifted[i], xtrain_rshifted[i]] for i in range(len(xtrain))]).reshape(-1, 28, 28)"
340
+ ]
341
+ },
342
+ {
343
+ "cell_type": "code",
344
+ "execution_count": 20,
345
+ "metadata": {},
346
+ "outputs": [
347
+ {
348
+ "data": {
349
+ "text/plain": [
350
+ "(120000, 28, 28)"
351
+ ]
352
+ },
353
+ "execution_count": 20,
354
+ "metadata": {},
355
+ "output_type": "execute_result"
356
+ }
357
+ ],
358
+ "source": [
359
+ "values.shape"
360
+ ]
361
+ },
362
+ {
363
+ "cell_type": "code",
364
+ "execution_count": 21,
365
+ "metadata": {},
366
+ "outputs": [],
367
+ "source": [
368
+ "values = values.reshape(-1, 28, 28)"
369
+ ]
370
+ },
371
+ {
372
+ "cell_type": "code",
373
+ "execution_count": 46,
374
+ "metadata": {},
375
+ "outputs": [
376
+ {
377
+ "data": {
378
+ "text/plain": [
379
+ "<matplotlib.image.AxesImage at 0x20244fdc1c0>"
380
+ ]
381
+ },
382
+ "execution_count": 46,
383
+ "metadata": {},
384
+ "output_type": "execute_result"
385
+ },
386
+ {
387
+ "data": {
388
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAcrUlEQVR4nO3df3BUZb7n8U8HkgY0aYwhv4aAAUVGgTiDELMqomQJmS0XkHXxx9wLrIsrBldgHK1Mqagzu5nBW46rE+XW3RH0ruCPugKr5TCrgYSrJniJsAylZgkTJSwkjNSQDkFCIM/+wdpOSwLzNB2+SXi/qk4V6T7fnMdjl28P3TkJOOecAAA4zxKsFwAAuDARIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYGKg9QK+q7OzU/v371dycrICgYD1cgAAnpxzam1tVXZ2thISur/O6XUB2r9/v3JycqyXAQA4R42NjRo+fHi3z/e6ACUnJ0uSbtCPNFCJxqsBAPg6oQ59oHcj/z3vTo8FqLy8XE8//bSampqUl5en559/XpMnTz7r3Dd/7TZQiRoYIEAA0Of8/zuMnu1tlB75EMLrr7+uZcuWafny5frkk0+Ul5enoqIiHTx4sCcOBwDog3okQM8884wWLlyoBQsW6KqrrtLKlSs1ZMgQvfTSSz1xOABAHxT3AB0/fly1tbUqLCz89iAJCSosLFR1dfVp+7e3tyscDkdtAID+L+4B+uqrr3Ty5EllZGREPZ6RkaGmpqbT9i8rK1MoFIpsfAIOAC4M5j+IWlpaqpaWlsjW2NhovSQAwHkQ90/BpaWlacCAAWpubo56vLm5WZmZmaftHwwGFQwG470MAEAvF/croKSkJE2cOFEVFRWRxzo7O1VRUaGCgoJ4Hw4A0Ef1yM8BLVu2TPPmzdO1116ryZMn69lnn1VbW5sWLFjQE4cDAPRBPRKguXPn6k9/+pMef/xxNTU16ZprrtHGjRtP+2ACAODCFXDOOetF/KVwOKxQKKSpmsmdEACgDzrhOlSpDWppaVFKSkq3+5l/Cg4AcGEiQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJgZaLwA4mxO3TPSeOXB/e0zH+t8FL3vP5FXP857JLk/ynhmw+RPvGaA34woIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADDBzUhxXnXe9APvmede+o33zOWJsb20O2OY2V6wynum7tqT3jM/vew67xmgN+MKCABgggABAEzEPUBPPPGEAoFA1DZ27Nh4HwYA0Mf1yHtAV199td5///1vDzKQt5oAANF6pAwDBw5UZmZmT3xrAEA/0SPvAe3evVvZ2dkaNWqU7r77bu3du7fbfdvb2xUOh6M2AED/F/cA5efna/Xq1dq4caNefPFFNTQ06MYbb1Rra2uX+5eVlSkUCkW2nJyceC8JANALxT1AxcXFuv322zVhwgQVFRXp3Xff1eHDh/XGG290uX9paalaWloiW2NjY7yXBADohXr80wFDhw7VmDFjVF9f3+XzwWBQwWCwp5cBAOhlevzngI4cOaI9e/YoKyurpw8FAOhD4h6ghx56SFVVVfriiy/00Ucfafbs2RowYIDuvPPOeB8KANCHxf2v4Pbt26c777xThw4d0rBhw3TDDTeopqZGw4YNi/ehAAB9WNwD9Nprr8X7W6KX6ph+rffMwy/8o/fMmMQk75nOmG4rKv2xo8N7pqXT/z3MH8Twtmd78STvmcGb/+B/IEmdx47FNAf44F5wAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJHv+FdDi/BqSkeM+0TRkb07GW/nqN98zNg4/EcKTz9/9Jq//8r7xnKl4o8J758InnvGfe++8rvWeu+h+LvWckadQj1THNAT64AgIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJ7obdz+x75XveM/8yqbwHVtI3PZX+L94zGy/2v4P2gi+me8+8fNn73jMpVx3yngHOF66AAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAAT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+OCDdov6K/T6K6Djx4+rtrZWhYWFkccSEhJUWFio6upqw5XZ2L17t7KzszVq1Cjdfffd2rt3r/WSTDU0NKipqSnq9REKhZSfn39Bvj4qKyuVnp6uK6+8UosWLdKhQ4esl9SjWlpaJEmpqamSpNraWnV0dES9HsaOHasRI0b069fDd8/DN1599VWlpaVp3LhxKi0t1dGjRy2W161edzPS7/rqq6908uRJZWRkRD2ekZGhzz//3GhVNvLz87V69WpdeeWVOnDggJ588kndeOON2rVrl5KTk62XZ6KpqUmSunx9fPPchWLGjBm67bbblJubqz179uhnP/uZiouLVV1drQEDBlgvL+46Ozu1ZMkSXX/99Ro3bpykU6+HpKQkDR06NGrf/vx66Oo8SNJdd92lkSNHKjs7Wzt37tQjjzyiuro6vfXWW4arjdbrA4RvFRcXR/48YcIE5efna+TIkXrjjTd0zz33GK4MvcEdd9wR+fP48eM1YcIEjR49WpWVlZo2bZrhynpGSUmJdu3adUG8D3om3Z2He++9N/Ln8ePHKysrS9OmTdOePXs0evTo873MLvX6v4JLS0vTgAEDTvsUS3NzszIzM41W1TsMHTpUY8aMUX19vfVSzHzzGuD1cbpRo0YpLS2tX74+Fi9erHfeeUebN2+O+vUtmZmZOn78uA4fPhy1f399PXR3HrqSn58vSb3q9dDrA5SUlKSJEyeqoqIi8lhnZ6cqKipUUFBguDJ7R44c0Z49e5SVlWW9FDO5ubnKzMyMen2Ew2Ft3br1gn997Nu3T4cOHepXrw/nnBYvXqx169Zp06ZNys3NjXp+4sSJSkxMjHo91NXVae/evf3q9XC289CVHTt2SFLvej1Yfwrir/Haa6+5YDDoVq9e7T799FN37733uqFDh7qmpibrpZ1XP/nJT1xlZaVraGhwH374oSssLHRpaWnu4MGD1kvrUa2trW779u1u+/btTpJ75pln3Pbt292XX37pnHPul7/8pRs6dKjbsGGD27lzp5s5c6bLzc11X3/9tfHK4+tM56G1tdU99NBDrrq62jU0NLj333/f/fCHP3RXXHGFO3bsmPXS42bRokUuFAq5yspKd+DAgch29OjRyD733XefGzFihNu0aZPbtm2bKygocAUFBYarjr+znYf6+nr31FNPuW3btrmGhga3YcMGN2rUKDdlyhTjlUfrEwFyzrnnn3/ejRgxwiUlJbnJkye7mpoa6yWdd3PnznVZWVkuKSnJfe9733Nz58519fX11svqcZs3b3aSTtvmzZvnnDv1UezHHnvMZWRkuGAw6KZNm+bq6upsF90DznQejh496qZPn+6GDRvmEhMT3ciRI93ChQv73f+kdfXPL8mtWrUqss/XX3/t7r//fnfJJZe4IUOGuNmzZ7sDBw7YLboHnO087N27102ZMsWlpqa6YDDoLr/8cvfTn/7UtbS02C78O/h1DAAAE73+PSAAQP9EgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJj4f/AC5c1cxGxsAAAAAElFTkSuQmCC",
389
+ "text/plain": [
390
+ "<Figure size 640x480 with 1 Axes>"
391
+ ]
392
+ },
393
+ "metadata": {},
394
+ "output_type": "display_data"
395
+ }
396
+ ],
397
+ "source": [
398
+ "plt.imshow(values[2])"
399
+ ]
400
+ },
401
+ {
402
+ "cell_type": "code",
403
+ "execution_count": 47,
404
+ "metadata": {},
405
+ "outputs": [
406
+ {
407
+ "data": {
408
+ "text/plain": [
409
+ "(120000,)"
410
+ ]
411
+ },
412
+ "execution_count": 47,
413
+ "metadata": {},
414
+ "output_type": "execute_result"
415
+ }
416
+ ],
417
+ "source": [
418
+ "index.shape"
419
+ ]
420
+ },
421
+ {
422
+ "cell_type": "code",
423
+ "execution_count": 22,
424
+ "metadata": {},
425
+ "outputs": [],
426
+ "source": [
427
+ "xtrain_new = xtrain.copy()\n",
428
+ "xtrain_new = np.insert(xtrain_new, index, values, axis = 0)"
429
+ ]
430
+ },
431
+ {
432
+ "cell_type": "code",
433
+ "execution_count": 23,
434
+ "metadata": {},
435
+ "outputs": [
436
+ {
437
+ "data": {
438
+ "text/plain": [
439
+ "(180000, 28, 28)"
440
+ ]
441
+ },
442
+ "execution_count": 23,
443
+ "metadata": {},
444
+ "output_type": "execute_result"
445
+ }
446
+ ],
447
+ "source": [
448
+ "xtrain_new.shape"
449
+ ]
450
+ },
451
+ {
452
+ "cell_type": "code",
453
+ "execution_count": 28,
454
+ "metadata": {},
455
+ "outputs": [
456
+ {
457
+ "data": {
458
+ "text/plain": [
459
+ "<matplotlib.image.AxesImage at 0x1fd89ed6310>"
460
+ ]
461
+ },
462
+ "execution_count": 28,
463
+ "metadata": {},
464
+ "output_type": "execute_result"
465
+ },
466
+ {
467
+ "data": {
468
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAcrUlEQVR4nO3df3BUZb7n8U8HkgY0aYwhv4aAAUVGgTiDELMqomQJmS0XkHXxx9wLrIsrBldgHK1Mqagzu5nBW46rE+XW3RH0ruCPugKr5TCrgYSrJniJsAylZgkTJSwkjNSQDkFCIM/+wdpOSwLzNB2+SXi/qk4V6T7fnMdjl28P3TkJOOecAAA4zxKsFwAAuDARIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYGKg9QK+q7OzU/v371dycrICgYD1cgAAnpxzam1tVXZ2thISur/O6XUB2r9/v3JycqyXAQA4R42NjRo+fHi3z/e6ACUnJ0uSbtCPNFCJxqsBAPg6oQ59oHcj/z3vTo8FqLy8XE8//bSampqUl5en559/XpMnTz7r3Dd/7TZQiRoYIEAA0Of8/zuMnu1tlB75EMLrr7+uZcuWafny5frkk0+Ul5enoqIiHTx4sCcOBwDog3okQM8884wWLlyoBQsW6KqrrtLKlSs1ZMgQvfTSSz1xOABAHxT3AB0/fly1tbUqLCz89iAJCSosLFR1dfVp+7e3tyscDkdtAID+L+4B+uqrr3Ty5EllZGREPZ6RkaGmpqbT9i8rK1MoFIpsfAIOAC4M5j+IWlpaqpaWlsjW2NhovSQAwHkQ90/BpaWlacCAAWpubo56vLm5WZmZmaftHwwGFQwG470MAEAvF/croKSkJE2cOFEVFRWRxzo7O1VRUaGCgoJ4Hw4A0Ef1yM8BLVu2TPPmzdO1116ryZMn69lnn1VbW5sWLFjQE4cDAPRBPRKguXPn6k9/+pMef/xxNTU16ZprrtHGjRtP+2ACAODCFXDOOetF/KVwOKxQKKSpmsmdEACgDzrhOlSpDWppaVFKSkq3+5l/Cg4AcGEiQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJgZaLwA4mxO3TPSeOXB/e0zH+t8FL3vP5FXP857JLk/ynhmw+RPvGaA34woIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADDBzUhxXnXe9APvmede+o33zOWJsb20O2OY2V6wynum7tqT3jM/vew67xmgN+MKCABgggABAEzEPUBPPPGEAoFA1DZ27Nh4HwYA0Mf1yHtAV199td5///1vDzKQt5oAANF6pAwDBw5UZmZmT3xrAEA/0SPvAe3evVvZ2dkaNWqU7r77bu3du7fbfdvb2xUOh6M2AED/F/cA5efna/Xq1dq4caNefPFFNTQ06MYbb1Rra2uX+5eVlSkUCkW2nJyceC8JANALxT1AxcXFuv322zVhwgQVFRXp3Xff1eHDh/XGG290uX9paalaWloiW2NjY7yXBADohXr80wFDhw7VmDFjVF9f3+XzwWBQwWCwp5cBAOhlevzngI4cOaI9e/YoKyurpw8FAOhD4h6ghx56SFVVVfriiy/00Ucfafbs2RowYIDuvPPOeB8KANCHxf2v4Pbt26c777xThw4d0rBhw3TDDTeopqZGw4YNi/ehAAB9WNwD9Nprr8X7W6KX6ph+rffMwy/8o/fMmMQk75nOmG4rKv2xo8N7pqXT/z3MH8Twtmd78STvmcGb/+B/IEmdx47FNAf44F5wAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJHv+FdDi/BqSkeM+0TRkb07GW/nqN98zNg4/EcKTz9/9Jq//8r7xnKl4o8J758InnvGfe++8rvWeu+h+LvWckadQj1THNAT64AgIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJ7obdz+x75XveM/8yqbwHVtI3PZX+L94zGy/2v4P2gi+me8+8fNn73jMpVx3yngHOF66AAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAAT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+OCDdov6K/T6K6Djx4+rtrZWhYWFkccSEhJUWFio6upqw5XZ2L17t7KzszVq1Cjdfffd2rt3r/WSTDU0NKipqSnq9REKhZSfn39Bvj4qKyuVnp6uK6+8UosWLdKhQ4esl9SjWlpaJEmpqamSpNraWnV0dES9HsaOHasRI0b069fDd8/DN1599VWlpaVp3LhxKi0t1dGjRy2W161edzPS7/rqq6908uRJZWRkRD2ekZGhzz//3GhVNvLz87V69WpdeeWVOnDggJ588kndeOON2rVrl5KTk62XZ6KpqUmSunx9fPPchWLGjBm67bbblJubqz179uhnP/uZiouLVV1drQEDBlgvL+46Ozu1ZMkSXX/99Ro3bpykU6+HpKQkDR06NGrf/vx66Oo8SNJdd92lkSNHKjs7Wzt37tQjjzyiuro6vfXWW4arjdbrA4RvFRcXR/48YcIE5efna+TIkXrjjTd0zz33GK4MvcEdd9wR+fP48eM1YcIEjR49WpWVlZo2bZrhynpGSUmJdu3adUG8D3om3Z2He++9N/Ln8ePHKysrS9OmTdOePXs0evTo873MLvX6v4JLS0vTgAEDTvsUS3NzszIzM41W1TsMHTpUY8aMUX19vfVSzHzzGuD1cbpRo0YpLS2tX74+Fi9erHfeeUebN2+O+vUtmZmZOn78uA4fPhy1f399PXR3HrqSn58vSb3q9dDrA5SUlKSJEyeqoqIi8lhnZ6cqKipUUFBguDJ7R44c0Z49e5SVlWW9FDO5ubnKzMyMen2Ew2Ft3br1gn997Nu3T4cOHepXrw/nnBYvXqx169Zp06ZNys3NjXp+4sSJSkxMjHo91NXVae/evf3q9XC289CVHTt2SFLvej1Yfwrir/Haa6+5YDDoVq9e7T799FN37733uqFDh7qmpibrpZ1XP/nJT1xlZaVraGhwH374oSssLHRpaWnu4MGD1kvrUa2trW779u1u+/btTpJ75pln3Pbt292XX37pnHPul7/8pRs6dKjbsGGD27lzp5s5c6bLzc11X3/9tfHK4+tM56G1tdU99NBDrrq62jU0NLj333/f/fCHP3RXXHGFO3bsmPXS42bRokUuFAq5yspKd+DAgch29OjRyD733XefGzFihNu0aZPbtm2bKygocAUFBYarjr+znYf6+nr31FNPuW3btrmGhga3YcMGN2rUKDdlyhTjlUfrEwFyzrnnn3/ejRgxwiUlJbnJkye7mpoa6yWdd3PnznVZWVkuKSnJfe9733Nz58519fX11svqcZs3b3aSTtvmzZvnnDv1UezHHnvMZWRkuGAw6KZNm+bq6upsF90DznQejh496qZPn+6GDRvmEhMT3ciRI93ChQv73f+kdfXPL8mtWrUqss/XX3/t7r//fnfJJZe4IUOGuNmzZ7sDBw7YLboHnO087N27102ZMsWlpqa6YDDoLr/8cvfTn/7UtbS02C78O/h1DAAAE73+PSAAQP9EgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJj4f/AC5c1cxGxsAAAAAElFTkSuQmCC",
469
+ "text/plain": [
470
+ "<Figure size 640x480 with 1 Axes>"
471
+ ]
472
+ },
473
+ "metadata": {},
474
+ "output_type": "display_data"
475
+ }
476
+ ],
477
+ "source": [
478
+ "plt.imshow(xtrain_new[4])"
479
+ ]
480
+ },
481
+ {
482
+ "cell_type": "code",
483
+ "execution_count": 30,
484
+ "metadata": {},
485
+ "outputs": [
486
+ {
487
+ "data": {
488
+ "text/plain": [
489
+ "array([ 1, 1, 2, ..., 59999, 60000, 60000])"
490
+ ]
491
+ },
492
+ "execution_count": 30,
493
+ "metadata": {},
494
+ "output_type": "execute_result"
495
+ }
496
+ ],
497
+ "source": [
498
+ "yindex = np.array([[x, x] for x in range(1, 60001)]).reshape(-1)\n",
499
+ "yindex"
500
+ ]
501
+ },
502
+ {
503
+ "cell_type": "code",
504
+ "execution_count": 31,
505
+ "metadata": {},
506
+ "outputs": [
507
+ {
508
+ "data": {
509
+ "text/plain": [
510
+ "array([5, 5, 5, ..., 8, 8, 8], dtype=uint8)"
511
+ ]
512
+ },
513
+ "execution_count": 31,
514
+ "metadata": {},
515
+ "output_type": "execute_result"
516
+ }
517
+ ],
518
+ "source": [
519
+ "ytrain_new = np.array([[x, x, x] for x in ytrain]).reshape(-1)\n",
520
+ "ytrain_new"
521
+ ]
522
+ },
523
+ {
524
+ "cell_type": "code",
525
+ "execution_count": 38,
526
+ "metadata": {},
527
+ "outputs": [],
528
+ "source": [
529
+ "xtrain_new_norm = xtrain_new/255"
530
+ ]
531
+ },
532
+ {
533
+ "cell_type": "code",
534
+ "execution_count": 39,
535
+ "metadata": {},
536
+ "outputs": [
537
+ {
538
+ "data": {
539
+ "text/plain": [
540
+ "(<matplotlib.image.AxesImage at 0x1fd8a06e790>, 0)"
541
+ ]
542
+ },
543
+ "execution_count": 39,
544
+ "metadata": {},
545
+ "output_type": "execute_result"
546
+ },
547
+ {
548
+ "data": {
549
+ "image/png": "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",
550
+ "text/plain": [
551
+ "<Figure size 640x480 with 1 Axes>"
552
+ ]
553
+ },
554
+ "metadata": {},
555
+ "output_type": "display_data"
556
+ }
557
+ ],
558
+ "source": [
559
+ "i = 5\n",
560
+ "plt.imshow(xtrain_new_norm[i]), ytrain_new[i]"
561
+ ]
562
+ },
563
+ {
564
+ "cell_type": "code",
565
+ "execution_count": 43,
566
+ "metadata": {},
567
+ "outputs": [
568
+ {
569
+ "data": {
570
+ "text/plain": [
571
+ "(180000, 28, 28, 1)"
572
+ ]
573
+ },
574
+ "execution_count": 43,
575
+ "metadata": {},
576
+ "output_type": "execute_result"
577
+ }
578
+ ],
579
+ "source": [
580
+ "xtrain_new_norm = xtrain_new_norm.reshape(-1, 28, 28, 1)\n",
581
+ "xtrain_new_norm.shape"
582
+ ]
583
+ },
584
+ {
585
+ "cell_type": "code",
586
+ "execution_count": 45,
587
+ "metadata": {},
588
+ "outputs": [
589
+ {
590
+ "name": "stdout",
591
+ "output_type": "stream",
592
+ "text": [
593
+ "Epoch 1/2\n",
594
+ "5625/5625 [==============================] - 220s 39ms/step - loss: 0.1053 - accuracy: 0.9673\n",
595
+ "Epoch 2/2\n",
596
+ "5625/5625 [==============================] - 215s 38ms/step - loss: 0.0378 - accuracy: 0.9882\n"
597
+ ]
598
+ },
599
+ {
600
+ "data": {
601
+ "text/plain": [
602
+ "<keras.callbacks.History at 0x1fd8aa752b0>"
603
+ ]
604
+ },
605
+ "execution_count": 45,
606
+ "metadata": {},
607
+ "output_type": "execute_result"
608
+ }
609
+ ],
610
+ "source": [
611
+ "model1 = tf.keras.Sequential([\n",
612
+ " tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu', input_shape = (28, 28, 1)),\n",
613
+ " tf.keras.layers.MaxPool2D(),\n",
614
+ "\n",
615
+ " tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),\n",
616
+ " tf.keras.layers.MaxPool2D(),\n",
617
+ "\n",
618
+ " tf.keras.layers.Flatten(),\n",
619
+ " tf.keras.layers.Dense(128, activation = 'relu'),\n",
620
+ " tf.keras.layers.Dense(10, activation = 'softmax')\n",
621
+ "])\n",
622
+ "# callback = tf.keras.callbacks.TensorBoard(log_dir = f'/log/{}')\n",
623
+ "\n",
624
+ "model1.compile(\n",
625
+ " loss = tf.keras.losses.SparseCategoricalCrossentropy(),\n",
626
+ " optimizer = tf.keras.optimizers.Adam(),\n",
627
+ " metrics = ['accuracy']\n",
628
+ ")\n",
629
+ "model1.fit(xtrain_new_norm, ytrain_new, epochs = 2)"
630
+ ]
631
+ },
632
+ {
633
+ "cell_type": "code",
634
+ "execution_count": 46,
635
+ "metadata": {},
636
+ "outputs": [],
637
+ "source": [
638
+ "model1.save('CNN_extended_dataset.h5')"
639
+ ]
640
+ },
641
+ {
642
+ "cell_type": "code",
643
+ "execution_count": null,
644
+ "metadata": {},
645
+ "outputs": [],
646
+ "source": []
647
+ }
648
+ ],
649
+ "metadata": {
650
+ "kernelspec": {
651
+ "display_name": "Python 3.9.12 ('develop_env': venv)",
652
+ "language": "python",
653
+ "name": "python3"
654
+ },
655
+ "language_info": {
656
+ "codemirror_mode": {
657
+ "name": "ipython",
658
+ "version": 3
659
+ },
660
+ "file_extension": ".py",
661
+ "mimetype": "text/x-python",
662
+ "name": "python",
663
+ "nbconvert_exporter": "python",
664
+ "pygments_lexer": "ipython3",
665
+ "version": "3.9.12"
666
+ },
667
+ "orig_nbformat": 4,
668
+ "vscode": {
669
+ "interpreter": {
670
+ "hash": "0868791e5364f72686924a0f04d93b83318e4731675bc3a629afddd6df69b833"
671
+ }
672
+ }
673
+ },
674
+ "nbformat": 4,
675
+ "nbformat_minor": 2
676
+ }