In [31]:
import pandas as pd
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
In [4]:
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
In [5]:
X_train.shape
Out[5]:
(60000, 28, 28)
In [56]:
X_train = (X_train / 255.0).reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2], 1).astype('float')
X_test = (X_test / 255.0).reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 1).astype('float')
In [55]:
 
Out[55]:
array([[[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]],


       [[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]],


       [[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]],


       ...,


       [[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]],


       [[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]],


       [[[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        ...,

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]],

        [[0.],
         [0.],
         [0.],
         ...,
         [0.],
         [0.],
         [0.]]]])
In [15]:
i = 1669
plt.imshow(X_train[i], cmap='gray')
print(y_train[i])
6
In [60]:
model = keras.Sequential()

# model.add(keras.layers.Conv2D(64, kernel_size=(3,3)))
# model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))

model.add(keras.layers.Conv2D(32, kernel_size=(3,3)))
model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))

model.add(keras.layers.Conv2D(16, kernel_size=(3,3)))
model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
In [61]:
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
In [62]:
model.fit(X_train, y_train, epochs=5, batch_size=100)
Epoch 1/5
600/600 [==============================] - 25s 41ms/step - loss: 0.8425 - accuracy: 0.7032
Epoch 2/5
600/600 [==============================] - 26s 44ms/step - loss: 0.1705 - accuracy: 0.9461
Epoch 3/5
600/600 [==============================] - 26s 43ms/step - loss: 0.1136 - accuracy: 0.9641
Epoch 4/5
600/600 [==============================] - 26s 43ms/step - loss: 0.0863 - accuracy: 0.9730
Epoch 5/5
600/600 [==============================] - 26s 44ms/step - loss: 0.0734 - accuracy: 0.9768
Out[62]:
<tensorflow.python.keras.callbacks.History at 0x1379e96a0>
In [63]:
model.evaluate(X_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.0704 - accuracy: 0.9775
Out[63]:
[0.07038439810276031, 0.9775000214576721]
In [64]:
j = 0
plt.imshow(X_test[j], cmap='gray')
prediction = model.predict(np.array([X_test[j]]))
print(f'Predicted: {np.argmax(prediction)}, Actual: {y_test[j]}')
Predicted: 7, Actual: 7