Convolutional Neural Networks

In [20]:
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist

import matplotlib.pyplot as plt

import numpy as np
In [2]:
(data_train,labels_train),(data_test,labels_test) = mnist.load_data()
In [3]:
data_train.shape
Out[3]:
(60000, 28, 28)
In [4]:
plt.imshow(data_train[5])
Out[4]:
<matplotlib.image.AxesImage at 0xb3e875518>
In [5]:
data_train = data_train.reshape(60000,28,28,1)
data_test = data_test.reshape(10000,28,28,1)
In [6]:
from tensorflow.keras.utils import to_categorical
In [7]:
print(labels_train[0])
5
In [8]:
labels_train = to_categorical(labels_train)
In [9]:
print(labels_train[0])
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
In [10]:
from tensorflow.keras.models import Sequential
In [11]:
# we just create a model
model = Sequential()

# add layers to it
model.add(layers.Conv2D(64,kernel_size=3,activation = 'relu', input_shape = (28,28,1)))
model.add(layers.Conv2D(32,kernel_size=3,activation='relu',kernel_regularizer = tf.keras.regularizers.l2(0.00001)))
model.add(layers.Flatten())
model.add(layers.Dense(10,activation='softmax'))

#compile the model
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
In [12]:
model.fit(data_train,labels_train,batch_size=32 , epochs=3)
Epoch 1/3
60000/60000 [==============================] - 46s 761us/step - loss: 1.0096 - acc: 0.9063
Epoch 2/3
60000/60000 [==============================] - 45s 742us/step - loss: 0.0663 - acc: 0.9798
Epoch 3/3
60000/60000 [==============================] - 45s 742us/step - loss: 0.0448 - acc: 0.9858
Out[12]:
<tensorflow.python.keras.callbacks.History at 0xb443b0a20>
In [15]:
labels_test = to_categorical(labels_test)
model.evaluate(data_test,labels_test,batch_size=32)
10000/10000 [==============================] - 3s 262us/step
Out[15]:
[0.0854495526144281, 0.9776]
In [33]:
for i in range(10):
    print(np.argmax(model.predict(data_test[i:i+1]))+1, np.argmax(labels_test[i])+1)
8 8
3 3
2 2
1 1
5 5
2 2
5 5
10 10
7 6
10 10
In [ ]: