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()
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()
In [20]:
plt.plot(history.history['loss'])
plt.title("Model Loss")
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.show()
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])
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 85ms/step Predicted Class: frog