Let us see some example Python code for a supervised CNN using image data augmentation with the CIFAR-10 dataset:
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Load the CIFAR-10 dataset
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# Normalize the input data
x_train = x_train.astype(‘float32’) / 255.0
x_test = x_test.astype(‘float32’) / 255.0
# Convert the labels to one-hot encoding
y_train = tf.keras.utils.to_categorical(y_train)
y_test = tf.keras.utils.to_categorical(y_test)
# Define the CNN architecture
The preceding code defines the architecture of a CNN using the Keras library. Let’s go through each line to understand the purpose and functionality of each component.
The following line creates a sequential model, which allows us to stack layers on top of each other sequentially:
model = Sequential()
The following code snippet adds a 2D convolutional layer to the model. It has 32 filters, a filter size of (3, 3), the ReLU activation function, and the ‘same’ padding. The input_shape parameter is set to the shape of the input data (x_train) without the batch dimension:
Let’s break down the following CNN code snippet to understand it more in depth:
model.add(Conv2D(32, (3, 3), activation=’relu’, \
padding=’same’, input_shape=x_train.shape[1:]))
2D convolutional layer addition: In deep learning for image processing, convolutional layers are crucial to learning hierarchical features from input images. Convolutional layers are used to detect local patterns in the input data. Each filter in the convolutional layer learns to recognize different features or patterns. The code adds a layer to the neural network model, and specifically, it’s a 2D convolutional layer.
The convolutional layer has the following configurations:
- Filters: There are 32 filters. Filters are small grids that slide over the input data to detect patterns or features.
- Filter size: Each filter has a size of (3, 3). This means it considers a 3×3 grid of pixels at some point during the convolution operation capturing local information.
- Activation function: The ReLU activation function is applied element-wise to the output of each convolutional operation. ReLU introduces non-linearity, allowing the model to learn complex patterns.
- Padding: The Same padding is used. Padding is a technique to preserve spatial dimensions after convolution preventing information loss at the edges of the image. Same padding pads the input so that the output has the same spatial dimensions as the it.
- Input shape parameter: The input_shape parameter is set to the shape of the input data (x_train) without the batch dimension. The input shape determines the size of the input data that the layer will process. In this case, it is set to the shape of the training data x_train without considering the batch dimension.
In summary, this code snippet adds a convolutional layer to the neural network model, configuring it with specific parameters for filter size, number of filters, activation function, and padding. The convolutional layer plays a crucial role in learning hierarchical features from input images.
The following line adds another 2D convolutional layer with the same specifications as the previous one, but without specifying the input shape. The model will infer the input shape based on the previous layer:
model.add(Conv2D(32, (3, 3), activation=’relu’))