Learn Classification of clothing images using TensorFlow in Python
Hello Everyone! In this post, let’s take a look at the Classification of various clothing images with the help of TensorFlow in Python.
Introduction to Classification Problem
We live in the age of Instagram, YouTube, and Twitter. It is very important for people nowadays to know how to classify clothing into various categories especially models and celebrities.
Building the Project
Step 1: Importing Modules
The first step in every project is to import all the required modules.
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt
Step 2: Loading and pre-processing of Data
The code below includes the data loading:
fashion_data=tf.keras.datasets.fashion_mnist
Step 3: Training and Testing Data Split
The code includes splitting the data into training and testing and also normalizing the data.
(inp_train,out_train),(inp_test,out_test)=fashion_data.load_data() inp_train = inp_train/255.0 inp_test = inp_test/255.0 print("Shape of Input Training Data: ", inp_train.shape) print("Shape of Output Training Data: ", out_train.shape) print("Shape of Input Testing Data: ", inp_test.shape) print("Shape of Output Testing Data: ", out_test.shape)
The final shapes of all the x and y train, as well as test data, is as follows:
Shape of Input Training Data: (60000, 28, 28) Shape of Output Training Data: (60000,) Shape of Input Testing Data: (10000, 28, 28) Shape of Output Testing Data: (10000,)
Step 4: Data Visualization
The code to visualize the initial data is as follows:
plt.figure(figsize=(10,10)) for i in range(100): plt.subplot(10,10,i+1) plt.imshow(inp_train[i]) plt.xticks([]) plt.yticks([]) plt.xlabel(out_train[i]) plt.tight_layout() plt.show()
The result of the visualization is shown below:
Step 5: Changing the labels to actual names
Now you can see in the previous visualization the labels are all numbers. But we want the labels to be names, hence we now work on that and visualize the data in the following code:
Labels=['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'] plt.figure(figsize=(10,10)) for i in range(100): plt.subplot(10,10,i+1) plt.xticks([]) plt.yticks([]) plt.imshow(inp_train[i], cmap=plt.cm.binary) plt.xlabel(Labels[out_train[i]]) plt.tight_layout() plt.show()
The new visualization is as follows:
You can see now that the visualization is now more understandable. Let’s move on to the main building of the model.
Step 6: Building, Compiling, Training the model
The code for the building, compiling, and training of the TensorFlow and Keras model is shown below:
my_model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10) ]) my_model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) my_model.fit(inp_train, out_train, epochs=20)
The result of the training at each epoch is as follows:
Epoch 1/20 1875/1875 [==============================] - 2s 998us/step - loss: 0.6246 - accuracy: 0.7832 Epoch 2/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.3835 - accuracy: 0.8612 Epoch 3/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.3323 - accuracy: 0.8773 Epoch 4/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.3123 - accuracy: 0.8850 Epoch 5/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2943 - accuracy: 0.8907 Epoch 6/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2745 - accuracy: 0.8966 Epoch 7/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2643 - accuracy: 0.9020 Epoch 8/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2550 - accuracy: 0.9066 Epoch 9/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2477 - accuracy: 0.9076 Epoch 10/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2333 - accuracy: 0.9127 Epoch 11/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2277 - accuracy: 0.9131 Epoch 12/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2131 - accuracy: 0.9212 Epoch 13/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2121 - accuracy: 0.9199 Epoch 14/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.2071 - accuracy: 0.9231 Epoch 15/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1977 - accuracy: 0.9275 Epoch 16/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1936 - accuracy: 0.9265 Epoch 17/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1906 - accuracy: 0.9292 Epoch 18/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1813 - accuracy: 0.9332 Epoch 19/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1812 - accuracy: 0.9332 Epoch 20/20 1875/1875 [==============================] - 2s 1ms/step - loss: 0.1738 - accuracy: 0.9352 <tensorflow.python.keras.callbacks.History at 0x1fd9da98898>
Step 7: Checking the final loss and accuracy
The code to check the accuracy is as follows:
loss, accuracy = my_model.evaluate(inp_test,out_test,verbose=2) print('\nAccuracy:',accuracy*100)
The final accuracy we get after the whole processing of our model is 88.8% which is pretty good.
Step8: Make Predictions
We come to make the final predictions and the code is as follows:
prob=tf.keras.Sequential([my_model,tf.keras.layers.Softmax()]) pred=prob.predict(inp_test)
Step 9: Visualizing the final predictions
We visualize the first 20 images. The code for the same is as follows:
plt.figure(figsize=(20,20)) for i in range(20): true_label,image = out_test[i],inp_test[i] pred_label = np.argmax(pred[i]) plt.subplot(10,10,i+1) plt.xticks([]) plt.yticks([]) plt.imshow(image, cmap=plt.cm.binary) if pred_label == true_label: color = 'green' label="Correct Prediction!" else: color = 'red' label="Wrong Prediction!" plt.tight_layout() plt.title(label,color=color) plt.xlabel(" {} -> {} ".format(Labels[true_label],Labels[pred_label]))
The result of the visualization is:
Conclusion
Thank you for reading the post. Keep reading to learn more. You can find the code for the project here.
Some Related Posts
- Traffic Sign Classification with TensorFlow in Python
- Classification of Celestial Bodies using CNN in Python
- Image classification of Bird species using Keras in Python
Leave a Reply