Import essential library
!pip install tensorflow
import tensorflow as tf
from tensorflow import keras
from keras import datasets, Input, Model, losses
from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D
import numpy as np
import matplotlib.pyplot as plt
Requirement already satisfied: tensorflow in /root/venv/lib/python3.9/site-packages (2.5.0rc1)
Requirement already satisfied: termcolor~=1.1.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.1.0)
Requirement already satisfied: gast==0.4.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (0.4.0)
Requirement already satisfied: google-pasta~=0.2 in /root/venv/lib/python3.9/site-packages (from tensorflow) (0.2.0)
Requirement already satisfied: grpcio~=1.34.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.34.1)
Requirement already satisfied: protobuf>=3.9.2 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from tensorflow) (3.15.8)
Requirement already satisfied: six~=1.15.0 in /shared-libs/python3.9/py-core/lib/python3.9/site-packages (from tensorflow) (1.15.0)
Requirement already satisfied: tensorflow-estimator<2.6.0,>=2.5.0rc0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (2.5.0rc0)
Requirement already satisfied: astunparse~=1.6.3 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.6.3)
Requirement already satisfied: opt-einsum~=3.3.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (3.3.0)
Requirement already satisfied: wheel~=0.35 in /root/venv/lib/python3.9/site-packages (from tensorflow) (0.36.2)
Requirement already satisfied: wrapt~=1.12.1 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.12.1)
Requirement already satisfied: keras-preprocessing~=1.1.2 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.1.2)
Requirement already satisfied: h5py~=3.1.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (3.1.0)
Requirement already satisfied: numpy~=1.19.2 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.19.5)
Requirement already satisfied: typing-extensions~=3.7.4 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from tensorflow) (3.7.4.3)
Requirement already satisfied: absl-py~=0.10 in /root/venv/lib/python3.9/site-packages (from tensorflow) (0.12.0)
Requirement already satisfied: tensorboard~=2.4 in /root/venv/lib/python3.9/site-packages (from tensorflow) (2.4.1)
Requirement already satisfied: keras-nightly~=2.5.0.dev in /root/venv/lib/python3.9/site-packages (from tensorflow) (2.5.0.dev2021032900)
Requirement already satisfied: flatbuffers~=1.12.0 in /root/venv/lib/python3.9/site-packages (from tensorflow) (1.12)
Requirement already satisfied: requests<3,>=2.21.0 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (2.25.1)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /root/venv/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (0.4.4)
Requirement already satisfied: markdown>=2.6.8 in /root/venv/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (3.3.4)
Requirement already satisfied: setuptools>=41.0.0 in /root/venv/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (54.1.2)
Requirement already satisfied: google-auth<2,>=1.6.3 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (1.28.1)
Requirement already satisfied: werkzeug>=0.11.15 in /root/venv/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (1.0.1)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /root/venv/lib/python3.9/site-packages (from tensorboard~=2.4->tensorflow) (1.8.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from google-auth<2,>=1.6.3->tensorboard~=2.4->tensorflow) (0.2.8)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from google-auth<2,>=1.6.3->tensorboard~=2.4->tensorflow) (4.2.1)
Requirement already satisfied: rsa<5,>=3.1.4 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from google-auth<2,>=1.6.3->tensorboard~=2.4->tensorflow) (4.7.2)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.4->tensorflow) (1.3.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard~=2.4->tensorflow) (0.4.8)
Requirement already satisfied: certifi>=2017.4.17 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorboard~=2.4->tensorflow) (2020.12.5)
Requirement already satisfied: idna<3,>=2.5 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorboard~=2.4->tensorflow) (2.10)
Requirement already satisfied: chardet<5,>=3.0.2 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorboard~=2.4->tensorflow) (3.0.4)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorboard~=2.4->tensorflow) (1.26.4)
Requirement already satisfied: oauthlib>=3.0.0 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.4->tensorflow) (3.1.0)
Download mnist dataset
(xt,yt), (xe,ye) = keras.datasets.mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
Visualize dataset
fig, axs = plt.subplots(5,5,figsize=(10,10))
for i in range(5):
for j in range(5):
ax = axs[i,j]
ax.imshow(xt[5*i+j])
ax.axis('off')
ax.set_title('This is '+str(yt[5*i+j]))
Declare model
inpt = Input((28,28,1))
model = Conv2D(32,(3,3),padding='same',activation='relu',input_shape=(28,28,1))(inpt)
model = MaxPooling2D((2,2))(model)
model = Conv2D(64,(3,3),padding='same',activation='relu',input_shape=(28,28,1))(model)
model = MaxPooling2D((2,2))(model)
model = Conv2D(128,(3,3),padding='same',activation='relu',input_shape=(28,28,1))(model)
model = MaxPooling2D((2,2))(model)
model = Conv2D(256,(3,3),padding='same',activation='relu',input_shape=(28,28,1))(model)
model = MaxPooling2D((2,2))(model)
model = Flatten()(model)
model = Dropout(0.5)(model)
model = Dense(128)(model)
model = Dense(10)(model)
model = Model(inpt,model)
model.compile(optimizer='adam',loss=losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['acc'])
model.summary()
Model: "model_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) [(None, 28, 28, 1)] 0
_________________________________________________________________
conv2d_20 (Conv2D) (None, 28, 28, 32) 320
_________________________________________________________________
max_pooling2d_20 (MaxPooling (None, 14, 14, 32) 0
_________________________________________________________________
conv2d_21 (Conv2D) (None, 14, 14, 64) 18496
_________________________________________________________________
max_pooling2d_21 (MaxPooling (None, 7, 7, 64) 0
_________________________________________________________________
conv2d_22 (Conv2D) (None, 7, 7, 128) 73856
_________________________________________________________________
max_pooling2d_22 (MaxPooling (None, 3, 3, 128) 0
_________________________________________________________________
conv2d_23 (Conv2D) (None, 3, 3, 256) 295168
_________________________________________________________________
max_pooling2d_23 (MaxPooling (None, 1, 1, 256) 0
_________________________________________________________________
flatten_5 (Flatten) (None, 256) 0
_________________________________________________________________
dropout_5 (Dropout) (None, 256) 0
_________________________________________________________________
dense_10 (Dense) (None, 128) 32896
_________________________________________________________________
dense_11 (Dense) (None, 10) 1290
=================================================================
Total params: 422,026
Trainable params: 422,026
Non-trainable params: 0
_________________________________________________________________
Scaling data and seperate train validation set
xt = xt/127.5-1
xe = xe/127.5-1
xv = xt[50000:60000]
yv = yt[50000:60000]
xt = xt[0:50000]
yt = yt[0:50000]
Fit the model
history = model.fit(xt,yt,epochs=10,batch_size=64,validation_data=(xv,yv))
Epoch 1/10
WARNING:tensorflow:AutoGraph could not transform <bound method Dense.call of <keras.layers.core.Dense object at 0x7ff51d48e850>> and will run it as-is.
Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.
Cause: invalid syntax (tmptw5en92r.py, line 48)
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
WARNING: AutoGraph could not transform <bound method Dense.call of <keras.layers.core.Dense object at 0x7ff51d48e850>> and will run it as-is.
Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.
Cause: invalid syntax (tmptw5en92r.py, line 48)
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
782/782 [==============================] - 169s 186ms/step - loss: 0.5882 - acc: 0.7990 - val_loss: 0.0440 - val_acc: 0.9883
Epoch 2/10
782/782 [==============================] - 143s 183ms/step - loss: 0.0706 - acc: 0.9783 - val_loss: 0.0475 - val_acc: 0.9869
Epoch 3/10
782/782 [==============================] - 140s 179ms/step - loss: 0.0514 - acc: 0.9840 - val_loss: 0.0415 - val_acc: 0.9887
Epoch 4/10
782/782 [==============================] - 142s 181ms/step - loss: 0.0396 - acc: 0.9884 - val_loss: 0.0378 - val_acc: 0.9900
Epoch 5/10
782/782 [==============================] - 142s 181ms/step - loss: 0.0297 - acc: 0.9907 - val_loss: 0.0327 - val_acc: 0.9909
Epoch 6/10
782/782 [==============================] - 138s 177ms/step - loss: 0.0262 - acc: 0.9928 - val_loss: 0.0291 - val_acc: 0.9913
Epoch 7/10
782/782 [==============================] - 141s 181ms/step - loss: 0.0210 - acc: 0.9932 - val_loss: 0.0348 - val_acc: 0.9919
Epoch 8/10
782/782 [==============================] - 143s 182ms/step - loss: 0.0235 - acc: 0.9925 - val_loss: 0.0353 - val_acc: 0.9919
Epoch 9/10
782/782 [==============================] - 142s 182ms/step - loss: 0.0218 - acc: 0.9933 - val_loss: 0.0327 - val_acc: 0.9915
Epoch 10/10
782/782 [==============================] - 142s 182ms/step - loss: 0.0156 - acc: 0.9955 - val_loss: 0.0392 - val_acc: 0.9922
fig, axs = plt.subplots(2,2,figsize=(10,10))
axs[0,0].plot(history.history['acc'])
axs[0,0].set_title('accuracy vs. epochs')
axs[0,0].set_xlabel('epochs')
axs[0,0].set_ylabel('accuracy')
axs[0,1].plot(history.history['val_acc'])
axs[0,1].set_title('validation accuracy vs. epochs')
axs[0,1].set_xlabel('epochs')
axs[0,1].set_ylabel('validation accuracy')
axs[1,0].plot(history.history['loss'])
axs[1,0].set_title('loss vs. epochs')
axs[1,0].set_xlabel('epochs')
axs[1,0].set_ylabel('loss')
axs[1,1].plot(history.history['val_loss'])
axs[1,1].set_title('validation loss vs. epochs')
axs[1,1].set_xlabel('epochs')
axs[1,1].set_ylabel('validation loss')
Evaluate
model.evaluate(xe,ye)
313/313 [==============================] - 7s 21ms/step - loss: 0.0315 - acc: 0.9913
Let see what model predict
predict = model.predict(xe)
fig, axs = plt.subplots(5,5,figsize=(15,16))
for i in range(5):
for j in range(5):
ax = axs[i,j]
if (np.argmax(predict[5*i+j])==ye[5*i+j]):
ax.imshow(xe[5*i+j])
else:
ax.imshow(xe[5*i+j],cmap='gray')
ax.axis('off')
ax.set_title('Model predict : '+str(np.argmax(predict[5*i+j]))+'\n'+'Ground truth : '+str(ye[5*i+j]))