Course name: “Machine Learning & Data Science – Beginner to Professional Hands-on Python Course in Hindi”
In the Machine Learning/Data Science/Deep Learning End to End Project in Python Tutorial in Hindi, we explained each and every step of Machine Learning Project / Data Science Project / Deep Learning Project in detail.
Project name: Fashion MNIST Classification using Convolutional Neural Network
What we cover in this Project:
- What is Convolutional Neural Network?
- What is Google Colab?
- Import Libraries
- Load Data
- Show Image from Numbers
- Change Dimension / Feature Scaling
- Build First Convolutional Neural Network
- Train Model
- Test & Evaluate Model
- Confusion Matrix
- Classification Report
- Save Mode
- Build 2 Complex CNN
1. What is Convolutional Neural Network?
Image Kernels >>> https://setosa.io/ev/image-kernels/
Hand written App >>> https://www.cs.ryerson.ca/~aharley/vis/conv/
2. What is Google Colab?
Google Colab >>> Click Here
3. Data Preprocessing
- Import Libraries
- Load Data
- Show Image from Numbers
- Change Dimension / Feature Scaling
# -*- coding: utf-8 -*-
"""CNN Project - Fashion-MNIST .ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1KrIrPLKKRwYobmqpacbf9eiQp5UC9Hhu
# Building CNN - Convolutional Neural Network
###Project Fashion-Classification - End to End
Train Convolutional Neural Network on 60,000 Fashion-MNIST Images (data in NP array)
Test Convolutional Neural Network on 10,000 Fashion-MNIST Images (data in NP array)
## Import Libraries
"""
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import keras # to build Neural Network
"""## Load Data"""
(X_train, y_train), (X_test, y_test) = keras.datasets.fashion_mnist.load_data() # load dataset from keras
# Print shape of Data
X_train.shape, y_train.shape, "******", X_test.shape, y_test.shape
X_train[0] # image data in 2d numpy array shape 28x28 pixel
y_train[0] #9 => Ankle boot
class_labels = ["T-shirt/top","Trouser","Pullover","Dress","Coat","Sandal","Shirt","Sneaker","Bag","Ankle boot"]
'''
0 => T-shirt/top
1 => Trouser
2 => Pullover
3 => Dress
4 => Coat
5 => Sandal
6 => Shirt
7 => Sneaker
8 => Bag
9 => Ankle boot '''
"""## Show image"""
plt.imshow(X_train[0], cmap='Greys')
plt.figure(figsize=(16,16))
j=1
for i in np.random.randint(0, 1000, 25):
plt.subplot(5,5,j); j+=1
plt.imshow(X_train[i], cmap="Greys")
plt.axis('off') # off the axis
plt.title('{} / {}'.format(class_labels[y_train[i]], y_train[i]))
"""## Change Dimention"""
X_train.shape
X_train.ndim
# expected conv2d_input to have 4 dimensions, but got array with shape (28, 28, 1)
# so we have increase the dimention 3 to 4
X_train = np.expand_dims(X_train, -1)
X_test = np.expand_dims(X_test, -1)
# ref: https://numpy.org/doc/stable/reference/generated/numpy.expand_dims.html
X_train.ndim
"""## Feature Scaling"""
X_train = X_train/255
X_test = X_test/255
"""## Split Dataset"""
from sklearn.model_selection import train_test_split
X_train, X_validation, y_train, y_validation = train_test_split(X_train, y_train, test_size= 0.2, random_state=2020)
X_train.shape, y_train.shape, X_validation.shape, y_validation.shape
4. Build First Convolutional Neural Network
"""# Convolutional Neural Network - Model Building"""
#Building CNN model
cnn_model = keras.models.Sequential([
keras.layers.Conv2D(filters=32, kernel_size=3, strides=(1,1), padding='valid',activation= 'relu', input_shape=[28,28,1]),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Flatten(),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dense(units=10, activation='softmax')
])
cnn_model.summary() # get the summary of model
# complie the model
cnn_model.compile(optimizer='adam', loss= 'sparse_categorical_crossentropy', metrics=['accuracy'])
# train cnn model
cnn_model.fit(X_train, y_train, epochs=10, batch_size=512, verbose=1, validation_data=(X_validation, y_validation))
5. Test and Evaluate Model
- Test & Evaluate Model
- Confusion Matrix
- Classification Report
"""# Test the Model"""
y_pred = cnn_model.predict(X_test)
y_pred.round(2)
y_test
cnn_model.evaluate(X_test, y_test)
"""# Visualize output
plt.figure(figsize=(16,16))
j=1
for i in np.random.randint(0, 1000,25):
plt.subplot(5,5, j); j+=1
plt.imshow(X_test[i].reshape(28,28), cmap = 'Greys')
plt.title('Actual = {} / {} \nPredicted = {} / {}'.format(class_labels[y_test[i]], y_test[i], class_labels[np.argmax(y_pred[i])],np.argmax(y_pred[i])))
plt.axis('off')
"""
plt.figure(figsize=(16,30))
j=1
for i in np.random.randint(0, 1000,60):
plt.subplot(10,6, j); j+=1
plt.imshow(X_test[i].reshape(28,28), cmap = 'Greys')
plt.title('Actual = {} / {} \nPredicted = {} / {}'.format(class_labels[y_test[i]], y_test[i], class_labels[np.argmax(y_pred[i])],np.argmax(y_pred[i])))
plt.axis('off')
"""## Confusion Matrix"""
from sklearn.metrics import confusion_matrix
plt.figure(figsize=(16,9))
y_pred_labels = [ np.argmax(label) for label in y_pred ]
cm = confusion_matrix(y_test, y_pred_labels)
# show cm
sns.heatmap(cm, annot=True, fmt='d',xticklabels=class_labels, yticklabels=class_labels)
from sklearn.metrics import classification_report
cr= classification_report(y_test, y_pred_labels, target_names=class_labels)
print(cr)
6. Save Model
"""# Save Model"""
cnn_model.save('fashion_mnist_cnn_model.h5') # Save model
# Load model
fashion_mnist_cnn_model = keras.models.load_model('fashion_mnist_cnn_model.h5')
Y_pred_sample = fashion_mnist_cnn_model.predict(np.expand_dims(X_test[0], axis=0)).round(2)
Y_pred_sample
np.argmax(Y_pred_sample[0])
y_test[0]
7. Build 2 Complex CNN
"""# Convolutional Neural Network - Building Complex Model"""
#Building CNN model
cnn_model2 = keras.models.Sequential([
keras.layers.Conv2D(filters=32, kernel_size=3, strides=(1,1), padding='valid',activation= 'relu', input_shape=[28,28,1]),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2,2), padding='same', activation='relu'),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Flatten(),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dropout(0.25),
keras.layers.Dense(units=256, activation='relu'),
keras.layers.Dropout(0.25),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dense(units=10, activation='softmax')
])
# complie the model
cnn_model2.compile(optimizer='adam', loss= 'sparse_categorical_crossentropy', metrics=['accuracy'])
#Train the Model
cnn_model2.fit(X_train, y_train, epochs=20, batch_size=512, verbose=1, validation_data=(X_validation, y_validation))
cnn_model2.save('fashion_mnist_cnn_model2.h5')
"""######## very complex model"""
#Building CNN model
cnn_model3 = keras.models.Sequential([
keras.layers.Conv2D(filters=64, kernel_size=3, strides=(1,1), padding='valid',activation= 'relu', input_shape=[28,28,1]),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Conv2D(filters=128, kernel_size=3, strides=(2,2), padding='same', activation='relu'),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2,2), padding='same', activation='relu'),
keras.layers.MaxPooling2D(pool_size=(2,2)),
keras.layers.Flatten(),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dropout(0.25),
keras.layers.Dense(units=256, activation='relu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(units=256, activation='relu'),
keras.layers.Dropout(0.25),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dropout(0.10),
keras.layers.Dense(units=10, activation='softmax')
])
# complie the model
cnn_model3.compile(optimizer='adam', loss= 'sparse_categorical_crossentropy', metrics=['accuracy'])
#Train the Model
cnn_model3.fit(X_train, y_train, epochs=50, batch_size=512, verbose=1, validation_data=(X_validation, y_validation))
cnn_model3.save('fashion_mnist_cnn_model3.h5')
cnn_model3.evaluate(X_test, y_test)
#End
In data processing
Code 59 that is for i in np.random.randint(0, 1000, 25):
Showing syntax error: unexpected EOF while parsing
Please help 🙏
in your code one error is that when you expand_dim of data then you can’t split data