Machine Learning MNIST handwritten character recognization
In this project, we will learn how to implement MNIST handwritten datasets using machine learning. Before start it first we know what is MNIST
What is MNIST?
The MNIST database contains 60,000 training images and 10,000 testing images. Half of the training set and half of the test set were taken from NIST's training dataset, while the other half of the training set and the other half of the test set were taken from NIST's testing dataset. There have been a number of scientific papers on attempts to achieve the lowest error rate; one paper, using a hierarchical system of convolutional neural networks, manages to get an error rate on the MNIST database of 0.23%. The original creators of the database keep a list of some of the methods tested on it. In their original paper, they use a support vector machine to get an error rate of 0.8%. An extended dataset similar to MNIST called EMNIST has been published in 2017, which contains 240,000 training images, and 40,000 testing images of handwritten digits and characters.
First, import the TensorFlow library and then load datasets.
import tensorflow as tf #Load the mnist dataset into a variable mnist = tf.keras.datasets.mnist # 28*28 images of hand written digits 0-9 (x_train, y_train),(x_test, y_test) = mnist.load_data() #Split the data into train and test sets
Now we are ready to show the MNIST datasets image, here simple code to show the MNIST Datasets.
import matplotlib.pyplot as plt # import matplotlib library #print(x_train) plt.imshow(x_train) # used to show the pixels as an image, so the zeroth index has a 5 in the image plt.show()
Now showing the image of zero index
#showing the image plt.imshow(x_train,cmap = plt.cm.binary)
Normalize the Datasets
Now we have normalized the data, after this, it is ready to fit into the model
#Normalize the data or scaling the data from keras.models import Sequential from keras.layers import Dense, Dropout, Conv2D, Flatten x_train = tf.keras.utils.normalize(x_train, axis =1) x_test = tf.keras.utils.normalize(x_test, axis = 1)
Fit into the Sequential Model
After normalizing, train and test data is ready to fit into the model.
# Building up the Model model = Sequential() model.add(Flatten()) model.add(Dense(128, activation = 'relu')) model.add(Dense(128, activation = 'relu')) model.add(Dense(10, activation = 'softmax')) #Configuring the model before training it model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy']) #Fit the model model.fit(x_train, y_train, epochs = 3)
Finding the accuracy of Model
val_loss, val_accuracy = model.evaluate(x_test, y_test) #evaluating the model with the test set print(val_loss,'Loss on the test set') print(val_accuracy,'Accuracy on the test set')
10000/10000 [==============================] - 0s 38us/step 0.09503882342190481 Loss on the test set 0.9718 Accuracy on the test set
Save the model
# Save the model model.save('mnist_save.model')
Loading the saved model
#Loading the model new_model = tf.keras.models.load_model('mnist_save.model')
Predict the result
# it requires a list to be passed as an argument predictions = new_model.predict([x_test])
Finding the Correct Result
#finding the actual value import numpy as np print(np.argmax(predictions)) # predicted value plt.imshow(x_test) # actual value plt.show()
Get your project or assignment completed by Deep learning expert and experienced developers and researchers.
If you have project files, You can send it at firstname.lastname@example.org directly.