In [4]:
!pip install tensorflow
Requirement already satisfied: tensorflow in c:\users\ketan\anaconda3\lib\site-packages (2.21.0)
Requirement already satisfied: absl-py>=1.0.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (2.4.0)
Requirement already satisfied: astunparse>=1.6.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (1.6.3)
Requirement already satisfied: flatbuffers>=25.9.23 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (25.12.19)
Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (0.7.0)
Requirement already satisfied: google_pasta>=0.1.1 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (0.2.0)
Requirement already satisfied: libclang>=13.0.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (18.1.1)
Requirement already satisfied: opt_einsum>=2.3.2 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (3.4.0)
Requirement already satisfied: packaging in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (25.0)
Requirement already satisfied: protobuf<8.0.0,>=6.31.1 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (7.34.1)
Requirement already satisfied: requests<3,>=2.21.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (2.32.5)
Requirement already satisfied: setuptools in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (80.9.0)
Requirement already satisfied: six>=1.12.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (1.17.0)
Requirement already satisfied: termcolor>=1.1.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (3.3.0)
Requirement already satisfied: typing_extensions>=3.6.6 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (4.15.0)
Requirement already satisfied: wrapt>=1.11.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (1.17.0)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (1.80.0)
Requirement already satisfied: keras>=3.12.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (3.14.1)
Requirement already satisfied: numpy>=1.26.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (2.3.5)
Requirement already satisfied: h5py<3.15.0,>=3.11.0 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (3.14.0)
Requirement already satisfied: ml_dtypes<1.0.0,>=0.5.1 in c:\users\ketan\anaconda3\lib\site-packages (from tensorflow) (0.5.4)
Requirement already satisfied: charset_normalizer<4,>=2 in c:\users\ketan\anaconda3\lib\site-packages (from requests<3,>=2.21.0->tensorflow) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in c:\users\ketan\anaconda3\lib\site-packages (from requests<3,>=2.21.0->tensorflow) (3.11)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\ketan\anaconda3\lib\site-packages (from requests<3,>=2.21.0->tensorflow) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\ketan\anaconda3\lib\site-packages (from requests<3,>=2.21.0->tensorflow) (2025.11.12)
Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\users\ketan\anaconda3\lib\site-packages (from astunparse>=1.6.0->tensorflow) (0.45.1)
Requirement already satisfied: rich in c:\users\ketan\anaconda3\lib\site-packages (from keras>=3.12.0->tensorflow) (14.2.0)
Requirement already satisfied: namex in c:\users\ketan\anaconda3\lib\site-packages (from keras>=3.12.0->tensorflow) (0.1.0)
Requirement already satisfied: optree in c:\users\ketan\anaconda3\lib\site-packages (from keras>=3.12.0->tensorflow) (0.19.1)
Requirement already satisfied: markdown-it-py>=2.2.0 in c:\users\ketan\anaconda3\lib\site-packages (from rich->keras>=3.12.0->tensorflow) (2.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\users\ketan\anaconda3\lib\site-packages (from rich->keras>=3.12.0->tensorflow) (2.19.2)
Requirement already satisfied: mdurl~=0.1 in c:\users\ketan\anaconda3\lib\site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.12.0->tensorflow) (0.1.2)
In [5]:
import tensorflow as tf
print(tf.__version__)
2.21.0
In [6]:
import tensorflow as tf
from tensorflow import keras
In [7]:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, models, regularizers
from tensorflow.keras.optimizers import Adam, SGD
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint
from tensorflow.keras.preprocessing.image import ImageDataGenerator

from sklearn.metrics import classification_report, confusion_matrix
import json
import time
import os
from datetime import datetime
In [8]:
np.random.seed(42)
tf.random.set_seed(42)

CLASS_NAMES = [
    'airplane',
    'automobile',
    'bird',
    'cat',
    'deer',
    'dog',
    'frog',
    'horse',
    'ship',
    'truck'
]
In [10]:
class CIFAR10Classifier:

    def __init__(self):

        print("Loading CIFAR-10 dataset...")

        (x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()

        self.x_train = x_train.astype('float32') / 255.0
        self.x_test = x_test.astype('float32') / 255.0

        self.y_train = keras.utils.to_categorical(y_train, 10)
        self.y_test = keras.utils.to_categorical(y_test, 10)

    def build_model(self):

        model = models.Sequential([

            layers.Conv2D(
                32,
                (3,3),
                activation='relu',
                input_shape=(32,32,3)
            ),

            layers.MaxPooling2D((2,2)),

            layers.Flatten(),

            layers.Dense(64, activation='relu'),

            layers.Dense(10, activation='softmax')

        ])

        model.compile(
            optimizer='adam',
            loss='categorical_crossentropy',
            metrics=['accuracy']
        )

        return model
In [12]:
classifier = CIFAR10Classifier()
Loading CIFAR-10 dataset...
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170498071/170498071 ━━━━━━━━━━━━━━━━━━━━ 18s 0us/step
In [13]:
model = classifier.build_model()
C:\Users\Ketan\anaconda3\Lib\site-packages\keras\src\layers\convolutional\base_conv.py:113: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
  super().__init__(activity_regularizer=activity_regularizer, **kwargs)
WARNING:tensorflow:TensorFlow GPU support is not available on native Windows for TensorFlow >= 2.11. Even if CUDA/cuDNN are installed, GPU will not be used. Please use WSL2 or the TensorFlow-DirectML plugin.
In [14]:
history = model.fit(
    classifier.x_train,
    classifier.y_train,
    epochs=5,
    batch_size=64
)
Epoch 1/5
782/782 ━━━━━━━━━━━━━━━━━━━━ 16s 17ms/step - accuracy: 0.4407 - loss: 1.5563
Epoch 2/5
782/782 ━━━━━━━━━━━━━━━━━━━━ 13s 17ms/step - accuracy: 0.5483 - loss: 1.2803
Epoch 3/5
782/782 ━━━━━━━━━━━━━━━━━━━━ 14s 18ms/step - accuracy: 0.5824 - loss: 1.1944
Epoch 4/5
782/782 ━━━━━━━━━━━━━━━━━━━━ 13s 16ms/step - accuracy: 0.6076 - loss: 1.1264
Epoch 5/5
782/782 ━━━━━━━━━━━━━━━━━━━━ 12s 16ms/step - accuracy: 0.6294 - loss: 1.0657
In [15]:
test_loss, test_accuracy = model.evaluate(
    classifier.x_test,
    classifier.y_test
)

print("Test Accuracy:", test_accuracy)
print("Test Loss:", test_loss)
313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.6013 - loss: 1.1336
Test Accuracy: 0.6013000011444092
Test Loss: 1.1335598230361938
In [16]:
predictions = model.predict(classifier.x_test)

predicted_labels = np.argmax(predictions, axis=1)

true_labels = np.argmax(classifier.y_test, axis=1)
313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step
In [17]:
cm = confusion_matrix(true_labels, predicted_labels)

plt.figure(figsize=(10,8))

sns.heatmap(
    cm,
    annot=True,
    fmt='d',
    cmap='Blues'
)

plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix")

plt.show()
No description has been provided for this image
In [18]:
print(classification_report(
    true_labels,
    predicted_labels
))
              precision    recall  f1-score   support

           0       0.65      0.69      0.67      1000
           1       0.69      0.80      0.74      1000
           2       0.44      0.45      0.45      1000
           3       0.47      0.36      0.40      1000
           4       0.48      0.59      0.53      1000
           5       0.66      0.30      0.42      1000
           6       0.55      0.81      0.66      1000
           7       0.68      0.68      0.68      1000
           8       0.73      0.71      0.72      1000
           9       0.71      0.62      0.66      1000

    accuracy                           0.60     10000
   macro avg       0.61      0.60      0.59     10000
weighted avg       0.61      0.60      0.59     10000

In [19]:
plt.plot(history.history['accuracy'])

plt.title("Model Accuracy")

plt.xlabel("Epoch")

plt.ylabel("Accuracy")

plt.show()
No description has been provided for this image
In [20]:
plt.plot(history.history['loss'])

plt.title("Model Loss")

plt.xlabel("Epoch")

plt.ylabel("Loss")

plt.show()
No description has been provided for this image
In [21]:
model.save("cifar10_cnn_model.keras")
In [22]:
class_names = [
    'airplane',
    'automobile',
    'bird',
    'cat',
    'deer',
    'dog',
    'frog',
    'horse',
    'ship',
    'truck'
]

index = 5

plt.imshow(classifier.x_test[index])

plt.show()

prediction = model.predict(
    classifier.x_test[index:index+1]
)

predicted_class = np.argmax(prediction)

print("Predicted Class:", class_names[predicted_class])
No description has been provided for this image
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 85ms/step
Predicted Class: frog