import numpy as np
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

class_names = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']

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

x_train = x_train / 255.0
x_test = x_test / 255.0

model = models.Sequential([
  layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)),
  layers.MaxPooling2D((2,2)),
  layers.Conv2D(64, (3,3), activation='relu'),
  layers.MaxPooling2D((2,2)),
  layers.Conv2D(64, (3,3), activation='relu'),
  layers.Flatten(),
  layers.Dense(64, activation='relu'),
  layers.Dense(10, activation='softmax')
])

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

history = model.fit(x_train, y_train,epochs=10,validation_data=(x_test, y_test),batch_size=64)

test_loss, test_acc = model.evaluate(x_test, y_test)
print("Test Accuracy:", test_acc)

predictions = model.predict(x_test)
index = 0
predicted_label = np.argmax(predictions[index])

plt.imshow(x_test[index])
plt.title("Predicted: " + class_names[predicted_label])
plt.axis('off')
plt.show()

print("Predicted Class:", class_names[predicted_label])
print("Actual Class:", class_names[y_test[index][0]])