-
Notifications
You must be signed in to change notification settings - Fork 0
/
tackling_mnsit_dataset.py
281 lines (187 loc) · 57.5 KB
/
tackling_mnsit_dataset.py
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
# -*- coding: utf-8 -*-
"""Tackling MNSIT Dataset.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1idl0Mo1PlX9p3kfJsOrQMGkc_jWUrM5u
## Handwritten Digit Recogonition (MNSIT Dataset)
![MNSIT.jpg](data:image/jpeg;base64,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)
![image.png](data:image/png;base64,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)
**History of Handwritten Digit dataset**
Modified National Institute of Standards and Technology database (MNIST dataset) is a large dataset of handwritten digits which is widely used in image processing and machine learning. The set of images in the MNIST database is a combination of two of NIST's databases: Special Database 1 and Special Database 3. Special Database 1 and Special Database 3 consist of digits written by high school students and employees of the United States Census Bureau, respectively.
**Why to start with MNIST dataset?**
The MNIST dataset is a well-known dataset for image classification. Tensorflow and Keras also provide MNIST dataset directly through their APIs. For the learning purpose, the MNIST dataset is easy to use and experiment with different machine learning techniques.
**About the Notebook**
* In this notebook, I have covered the necessary steps to approach any Machine Learning Classification Problem.
* Included Image Visualization for better understanding.
* Quick Links to the functions I have used to explore it in depth.
* Basic techniques such as k-folds, using Callbacks, etc.
I have tried to make this notebook as simple as possible, along with covering the basic approach to tackle any classification task.
**Task**
The task is to classify the images in 10 class, i.e., [0-9], inclusively.
## Required Imports
**Imports:**
1. pandas : For handeling csv dataset
2. numpy : Support for Pandas and calculations
3. Matplotlib - For visualization (Plotting graphs)
4. keras - Prediction Models
5. tensorflow - Prediction Models
"""
# Commented out IPython magic to ensure Python compatibility.
import pandas as pd
import numpy as np
import tensorflow as tf
import keras
import os
import matplotlib.pyplot as plt
import pickle
# %matplotlib inline
"""## Loading and Visualizing Dataset
---
**About Dataset**
MNIST dataset has the following features:
* Dataset size 60,000 samples of handwritten images.
* The size of each image is 28x28 pixels.
* Each image has only 1 color channel, i.e., grayscale image.
* Each pixel has value in the range of [0,255] where 0 represents black, and 255 represents white.
* Each image has labeled from 0-9.
**Loading Training and testing Data**
"""
(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.mnist.load_data()
print("The shape of training dataset -", X_train_full.shape)
print("Each pixel intensity is also represented as a byte(0-255) -", X_train_full.dtype)
"""Prepairing **Validation data** and **Normalizing the data**
**It requires a few steps:**
* Assuming the validation set size. I am taking it 10% of the training set.
* Splitting training set into a training set (90% original training set) and validation set (10% original training set) from the training dataset.
* scaling down the pixel intensities down to the 0-1 range and convert them to floats, by dividing by 255
* Splitting the labels for both training set and validation set.
"""
X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]
X_test = X_test / 255.
"""Shape of training set"""
X_train.shape, y_train.shape
"""## Visualize Digits dataset
---
**Visualizing the digits by plotting Images**
This will plot the first 40 images of diits with the label.
"""
n_rows = 4
n_cols = 10
plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))
for row in range(n_rows):
for col in range(n_cols):
index = n_cols * row + col
plt.subplot(n_rows, n_cols, index + 1)
plt.imshow(X_train[index], cmap="binary", interpolation="nearest")
plt.axis("off")
plt.title(y_train[index], fontsize=12)
plt.subplots_adjust(wspace=0.2, hspace=0.5)
plt.show()
"""**Visualising one digit**
---
This will plot an image of the first digit in the dataset.
"""
plt.imshow(X_train[0], cmap="binary")
plt.axis("off")
plt.show()
print(y_train[0])
"""## **Building Model**
---
**Model Using Keras**
There are two different ways of defining the Model in Keras:
* Sequential Model
* Function API
Functional API is used to build a more complicated Model such as for multi-output Models, directed acyclic graphs, or models with shared layers. I am using the Sequential Model in this notebook to keep things simple.
In Sequential Model, you can add each layer sequentially.
Let's build a simple dense network and find the optimal learning rate. We will need a callback to grow the learning rate at each iteration. It will also record the learning rate and the loss at each iteration:
"""
K = keras.backend
class ExponentialLearningRate(keras.callbacks.Callback):
def __init__(self, factor):
self.factor = factor
self.rates = []
self.losses = []
def on_batch_end(self, batch, logs):
self.rates.append(K.get_value(self.model.optimizer.lr))
self.losses.append(logs["loss"])
K.set_value(self.model.optimizer.lr, self.model.optimizer.lr * self.factor)
keras.backend.clear_session()
np.random.seed(42)
tf.random.set_seed(42)
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28, 28]),
keras.layers.Dense(300, activation="relu"),
keras.layers.Dense(100, activation="relu"),
keras.layers.Dense(10, activation="softmax")
])
"""We will start with a small learning rate of 1e-3, and grow it by 0.5% at each iteration:"""
model.compile(loss="sparse_categorical_crossentropy",
optimizer=keras.optimizers.SGD(lr=1e-3),
metrics=["accuracy"])
expon_lr = ExponentialLearningRate(factor=1.005) # increasing by 0.5% factor at each iterton
"""Now let's train the model for just 1 epoch:"""
history = model.fit(X_train, y_train, epochs=1,
validation_data=(X_valid, y_valid),
callbacks=[expon_lr])
"""We can now plot the loss as a functionof the learning rate:"""
plt.plot(expon_lr.rates, expon_lr.losses)
plt.gca().set_xscale('log')
plt.hlines(min(expon_lr.losses), min(expon_lr.rates), max(expon_lr.rates))
plt.axis([min(expon_lr.rates), max(expon_lr.rates), 0, expon_lr.losses[0]])
plt.xlabel("Learning rate")
plt.ylabel("Loss")
"""The loss starts shooting back up violently around 3e-1, so let's try using 2e-1 as our learning rate:"""
keras.backend.clear_session()
np.random.seed(42)
tf.random.set_seed(42)
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28, 28]),
keras.layers.Dense(300, activation="relu"),
keras.layers.Dense(100, activation="relu"),
keras.layers.Dense(10, activation="softmax")
])
model.compile(loss="sparse_categorical_crossentropy",
optimizer=keras.optimizers.SGD(lr=2e-1),
metrics=["accuracy"])
run_index = 1 # increment this at every run
run_logdir = os.path.join(os.curdir, "my_mnsit_logs", "run_{:03d}".format(run_index))
run_logdir
early_stopping_cb = keras.callbacks.EarlyStopping(patience=20)
checkpoint_cb = keras.callbacks.ModelCheckpoint("my_mnsit_model.h5", save_best_only=True)
tenorboard_cb = keras.callbacks.TensorBoard(run_logdir)
history = model.fit(X_train, y_train, epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[early_stopping_cb, checkpoint_cb, tenorboard_cb])
"""See, our model compilation stopped at around 23-29 epochs that means our best model is somewhere here and there"""
model = keras.models.load_model("my_mnsit_model.h5") # rolling back to best model
model.evaluate(X_test, y_test)
"""We got over 97% accuracy. Finally 😃"""
valid_p = np.argmax(model.predict(X_valid), axis=1)
"""## Visualizing Result
---
#### All Errors in the Validation set
Let's see all the errors in the validation set. It seems that in most of the cases, the recognition of digits is difficult for even humans. So we can say that our model is performing well.
"""
rows = 10
cols = 10
f = plt.figure(figsize=(2*cols,2*rows))
sub_plot = 1
for i in range(X_valid.shape[0]):
if y_valid[i]!=valid_p[i]:
f.add_subplot(rows,cols,sub_plot)
sub_plot+=1
plt.imshow(X_valid[i].reshape([28,28]),cmap="binary", interpolation="nearest")
plt.axis("off")
plt.title("T: "+str(y_valid[i])+" P:"+str(valid_p[i]), y=-0.15,color="Red")
plt.show()
"""## Predict on Testset"""
y_test = np.argmax(model.predict(X_test), axis=1)
rows = 5
cols = 10
f = plt.figure(figsize=(2*cols,2*rows))
for i in range(rows*cols):
f.add_subplot(rows,cols,i+1)
plt.imshow(X_test[i].reshape([28,28]),cmap="binary")
plt.axis("off")
plt.title(str(y_test[i]))