Binary classifier using Convolutional Neural Network
A binary classifier using a Convolutional Neural Network (CNN) is a model designed to classify input data (e.g., images) into one of two categories. Below is a step-by-step guide to implement such a classifier using Python with TensorFlow and Keras:
Steps to Implement
Prepare the Dataset:
Use a dataset with two classes, such as a custom dataset or pre-existing datasets like cats vs. dogs.
Split the dataset into training, validation, and testing sets.
Preprocess the Data:
Normalize pixel values to a range of [0, 1].
Resize images to a consistent size (e.g., 128x128).
Apply data augmentation to improve generalization.
Build the CNN Model:
Use convolutional layers for feature extraction.
Use pooling layers for dimensionality reduction.
Add fully connected layers for classification.
Compile the Model:
Use binary cross-entropy as the loss function.
Choose an optimizer like Adam.
Evaluate the model using metrics such as accuracy.
Train the Model:
Fit the model on the training data.
Validate it using the validation set.
Evaluate and Test the Model:
Evaluate the model's performance on unseen data.
Fine-tune the hyperparameters if necessary.
Here is an example implementation:
pythonCopyEditimport tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Dataset preparation
IMG_SIZE = (128, 128)
BATCH_SIZE = 32
train_datagen = ImageDataGenerator(
rescale=1.0/255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.2 # Split data into training and validation
)
train_data = train_datagen.flow_from_directory(
"path_to_data",
target_size=IMG_SIZE,
batch_size=BATCH_SIZE,
class_mode="binary",
subset="training"
)
val_data = train_datagen.flow_from_directory(
"path_to_data",
target_size=IMG_SIZE,
batch_size=BATCH_SIZE,
class_mode="binary",
subset="validation"
)
# Build the CNN model
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(128, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dropout(0.5),
layers.Dense(1, activation='sigmoid') # Output layer for binary classification
])
# Compile the model
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
# Train the model
history = model.fit(
train_data,
epochs=10,
validation_data=val_data
)
# Save the model
model.save("binary_classifier_cnn.h5")
# Evaluate the model
test_loss, test_accuracy = model.evaluate(val_data)
print(f"Test accuracy: {test_accuracy}")
Notes:
Dataset Path: Replace
"path_to_data"with the path to your dataset folder containing two subfolders for each class.Hyperparameters: Adjust
IMG_SIZE,BATCH_SIZE, and the number of epochs for your specific dataset and hardware.Extensions: Add callbacks like early stopping or model checkpointing for better training control.



