30 Days of Data Science Series: https://t.me/datasciencefun/1708
Let's learn about Convolutional Neural Networks (CNNs)
#### Concept
Convolutional Neural Networks (CNNs) are specialized neural networks designed to process data with a grid-like topology, such as images. They are particularly effective for image recognition and classification tasks due to their ability to capture spatial hierarchies in the data.
#### Key Features of CNNs
1. Convolutional Layers: Apply convolution operations to extract features from the input data.
2. Pooling Layers: Reduce the dimensionality of the data while retaining important features.
3. Fully Connected Layers: Perform classification based on the extracted features.
4. Activation Functions: Introduce non-linearity to the network (e.g., ReLU).
5. Filters/Kernels: Learnable parameters that detect specific patterns like edges, textures, etc.
#### Key Steps
1. Convolution Operation: Slide filters over the input image to create feature maps.
2. Pooling Operation: Downsample the feature maps to reduce dimensions and computation.
3. Flattening: Convert the 2D feature maps into a 1D vector for the fully connected layers.
4. Fully Connected Layers: Perform the final classification based on the extracted features.
#### Implementation
Let's implement a simple CNN using Keras on the MNIST dataset, which consists of handwritten digit images.
##### Example
# Import necessary libraries
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical
# Load the MNIST dataset
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# Preprocessing the data
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32') / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# Creating the CNN model
model = Sequential([
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
# Compiling the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Training the model
model.fit(X_train, y_train, epochs=10, batch_size=200, validation_split=0.2, verbose=1)
# Evaluating the model
loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
print(f"Test Accuracy: {accuracy}")