Image classification is a core computer vision task. Convolutional Neural Networks (CNNs) excel at this. CNNs automatically learn visual features. This guide explains building an image classifier. We will use CNNs and Python with Keras. Keras runs on TensorFlow for efficiency.
First, prepare your image dataset. Organize images into folders. Each folder represents a class. For example, folders for “cats” and “dogs”. Keras ImageDataGenerator helps load data. It also performs data augmentation. Augmentation improves model robustness.
from tensorflow.keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) training_set = train_datagen.flow_from_directory('training_dataset', target_size=(64, 64), batch_size=32, class_mode='binary')
Next, build the CNN architecture. CNNs consist of convolutional layers. Pooling layers and fully connected layers are also used. Convolutional layers extract features. They use filters to scan images. ReLU activation adds non-linearity. Pooling layers reduce dimensionality. MaxPooling is a common choice. Fully connected layers perform classification. They map learned features to classes.
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense cnn = Sequential() cnn.add(Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[64, 64, 3])) cnn.add(MaxPooling2D(pool_size=2, strides=2)) cnn.add(Conv2D(filters=32, kernel_size=3, activation='relu')) cnn.add(MaxPooling2D(pool_size=2, strides=2)) cnn.add(Flatten()) cnn.add(Dense(units=128, activation='relu')) cnn.add(Dense(units=1, activation='sigmoid')) # Binary classification
Compile the CNN model. Choose an optimizer like Adam. Select a loss function suitable for your task. Binary cross-entropy for binary classification. Categorical cross-entropy for multi-class. Accuracy is a common evaluation metric.
cnn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
Train the CNN model. Use the training dataset. Specify epochs and validation data. Validation data helps monitor overfitting. Training involves forward and backward propagation. Weights are adjusted to minimize loss.
cnn.fit(x = training_set, epochs = 25)
Evaluate the trained CNN. Use a separate test dataset. Evaluate accuracy and other relevant metrics. This assesses model generalization ability. High test accuracy indicates good performance.
test_datagen = ImageDataGenerator(rescale=1./255) test_set = test_datagen.flow_from_directory('test_dataset', target_size=(64, 64), batch_size=32, class_mode='binary') evaluation = cnn.evaluate(test_set) print(f"Test Loss: {evaluation[0]}, Test Accuracy: {evaluation[1]}")
Finally, use the model for predictions. Load a new, unseen image. Preprocess the image like training data. Use cnn.predict() to get the prediction. The output is a probability (for binary). Interpret the probability for classification. CNNs are powerful for image classification. This process outlines building a basic model. Experiment to improve performance further.