import tensorflow as tf
import tensorflow_datasets as tfds
from [Link] import Sequential
from [Link] import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
import [Link] as plt
# Load dataset
dataset_name = 'cats_vs_dogs'
(data_train, data_test), dataset_info = [Link](
dataset_name,
split=['train[:80%]', 'train[80%:]'],
as_supervised=True, # Include labels
with_info=True # Include dataset info
# Data preprocessing
IMG_SIZE = 150
def preprocess_image(image, label):
image = [Link](image, (IMG_SIZE, IMG_SIZE))
image = image / 255.0 # Normalize pixel values
return image, label
train_dataset = data_train.map(preprocess_image).shuffle(1000).batch(32).prefetch(1)
test_dataset = data_test.map(preprocess_image).batch(32).prefetch(1)
# Visualize a few samples
def plot_samples(dataset, n_samples=5):
[Link](figsize=(12, 8))
for i, (image, label) in enumerate([Link](n_samples)):
ax = [Link](1, n_samples, i + 1)
[Link]([Link]())
[Link]('Cat' if [Link]() == 0 else 'Dog')
[Link]('off')
[Link]()
plot_samples(data_train.map(preprocess_image))
# Build CNN model
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 3)),
MaxPooling2D(2, 2),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid') # Binary classification
])
[Link](optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
# Train the model
history = [Link](
train_dataset,
validation_data=test_dataset,
epochs=10
)
# Evaluate the model
loss, accuracy = [Link](test_dataset)
print(f"Test Accuracy: {accuracy:.2f}")
# Plot training history
acc = [Link]['accuracy']
val_acc = [Link]['val_accuracy']
loss = [Link]['loss']
val_loss = [Link]['val_loss']
epochs = range(len(acc))
[Link](figsize=(12, 8))
[Link](epochs, acc, 'r', label='Training Accuracy')
[Link](epochs, val_acc, 'b', label='Validation Accuracy')
[Link]('Training and Validation Accuracy')
[Link]()
[Link](figsize=(12, 8))
[Link](epochs, loss, 'r', label='Training Loss')
[Link](epochs, val_loss, 'b', label='Validation Loss')
[Link]('Training and Validation Loss')
[Link]()
[Link]()