AMTICS Enrollment No: 202203103510224
Practical 1
To study and implement CNN on CIFAR-10 with real-world testing.
Problem Description:
This practical task involves building and fine-tuning a Convolutional Neural
Network (CNN) to classify images within the CIFAR-10 dataset, which includes
ten diverse categories such as animals and vehicles. The objective is to
improve the model's accuracy through optimization techniques like data
augmentation and regularization. Additionally, the model’s performance will
be evaluated on ten or more real-world images to assess its generalization
capabilities outside the training dataset. The completed project will be
compiled into a single PDF, including the code, results, and summary.
Solution Architecture:
AI5012 - Machine Learning
AMTICS Enrollment No: 202203103510224
Code:
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
from PIL import Image
from google.colab import files
from tkinter import filedialog
import numpy as np
(train_images, train_labels), (test_images, test_labels) =
datasets.cifar10.load_data()
# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
"""# View Data"""
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse',
'ship', 'truck']
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i])
plt.xlabel(class_names[train_labels[i][0]])
plt.show()
"""# Create Model"""
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
AI5012 - Machine Learning
AMTICS Enrollment No: 202203103510224
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
"""# Check Model Structure"""
model.summary()
"""# Dense Layer for Classification
To complete the model, you will feed the last output tensor from the
convolutional base (of shape (4, 4, 64)) into one or more Dense layers to
perform classification.
"""
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
"""# Check Complete CNN Archietcture"""
model.summary()
"""# Compile and Train the Model"""
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
"""# Check Performance with Plotting"""
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(test_acc)
AI5012 - Machine Learning
AMTICS Enrollment No: 202203103510224
# Function to preprocess the image
def preprocess_image(image_path):
image = Image.open(image_path).resize((32, 32))
image = np.array(image) / 255.0 # Normalize the image
image = np.expand_dims(image, axis=0) # Add batch dimension
return image
# Function to predict the label of the uploaded image
def predict_image_label(image_path):
image = preprocess_image(image_path)
predictions = model.predict(image)
predicted_label = class_names[np.argmax(predictions)]
return predicted_label
# Upload and predict image
uploaded = files.upload()
for file_name in uploaded.keys():
predicted_label = predict_image_label(file_name)
print(f"Predicted Label for {file_name}: {predicted_label}")
AI5012 - Machine Learning
AMTICS Enrollment No: 202203103510224
Results:
AI5012 - Machine Learning
AMTICS Enrollment No: 202203103510224
Summary :
The CNN model was developed and optimized to classify images accurately
within the CIFAR-10 dataset. Fine-tuning techniques, including data
augmentation, dropout, and learning rate adjustments, were applied to
enhance accuracy and reduce overfitting. The model was further tested on
real-world images, demonstrating strong generalization beyond the dataset.
The submission includes well-organized code, a summary of key findings, and
a report on real-world performance, all compiled in a single PDF as per the
submission requirements.
AI5012 - Machine Learning