Coding Assignment 4: Implementing a Convolutional Neural Network for CIFAR-10 using Keras
July 28, 2024
1 ****Overview
In this assignment, you will implement a Convolutional Neural Network (CNN) to classify images from the CIFAR-10 dataset using the Keras library. Follow the instructions step-by-step to build, compile, train, and evaluate your model.
2 Instructions
2.1 Step ****1: Import ****Required ****Libraries
Import the necessary libraries: numpy, matplotlib.pyplot, and required mod- ules from keras. Refer to the Keras documentation for more details.
2.2 Step ****2: Load ****and ****Preprocess ****the ****Dataset
• Load the CIFAR-10 dataset using keras .datasets .cifar10 .load data().
• Normalize the images by converting pixel values to the range [0, 1]. This can be done by casting the image data to float32 and dividing by 255.0.
• One-hot encode the labels using the appropriate function from keras .utils.
• Refer to the Keras dataset documentation for more details.
2.3 Step ****3: Data ****Augmentation
• Implement data augmentation using ImageDataGenerator from keras .preprocessing .image.
• Set parameters for the data augmentation:
– ****rotation range=15: Specify the degree range for random rotations.
– ****width shift range=0 .1: Specify the fraction of total width for hor- izontal shift.
– ****height shift range=0 .1: Specify the fraction of total height for vertical shift.
– ****horizontal flip=True: Set to True to randomly flip inputs hori- zontally.
• Fit the data generator on training images using .fit(train images).
• Refer to the Keras ImageDataGenerator documentation for more details.
2.4 Step ****4: Define ****the ****Learning ****Rate ****Scheduler
• Implement a learning rate scheduler using LearningRateScheduler from keras .callbacks.
• Define a function lr schedule that adjusts the learning rate at specific epochs. The function should reduce the learning rate by half after epoch
3 and epoch 6.
• Pass the learning rate schedule function to LearningRateScheduler(lr schedule).
• Refer to the Keras LearningRateScheduler documentationfor more details.
2.5 Step ****5: Implement ****ReduceLR OnPlateau ****Callback
• Implement ReduceLROnPlateau callback to reduce the learning rate when a metric has stopped improving.
• Use the following parameters:
– ****monitor=’val loss’ : Monitor the validation loss.
– ****factor=0.5: Reduce the learning rate by half.
– ****patience=2: Number of epochs with no improvement after which learning rate will be reduced.
– ****min lr=1e-6: Lower bound on the learning rate.
– ****verbose=1: Enable verbosity.
• Refer to the Keras ReduceLROnPlateau documentation for more details.
2.6 Step ****6: ****Build ****the ****CNN ****Model
• Build the CNN model using Sequential from keras .models.
• Add the following layers in sequence:
– ****Conv2D(32, (3, 3), activation=’relu’, padding=’same’, input shape=(32,
32, 3)): Add a 2D convolution layer with 32 filters, a kernel size of 3x3, ReLU activation, and same padding.
– ****BatchNormalization(): Add a batch normalization layer.
– ****Conv2D(32, (3, 3), activation=’relu’, padding=’same’): Add another 2D convolution layer with the same specifications as above.
– ****BatchNormalization(): Add another batch normalization layer.
– ****MaxPooling2D((2, 2)): Add a max pooling layer with a pool size of 2x2.
– ****Dropout(0.2): Add a dropout layer with a rate of 0.2.
– ****Conv2D(64, (3, 3), activation=’relu’, padding=’same’): Add a 2D convolution layer with 64 filters, a kernel size of 3x3, ReLU ac- tivation, and same padding.
– ****BatchNormalization(): Add a batch normalization layer.
– ****Conv2D(64, (3, 3), activation=’relu’, padding=’same’): Add another 2D convolution layer with the same specifications as above.
– ****BatchNormalization(): Add another batch normalization layer.
– ****MaxPooling2D((2, 2)): Add a max pooling layer with a pool size of 2x2.
– ****Dropout(0.3): Add a dropout layer with a rate of 0.3.
– ****Conv2D(128, (3, 3), activatio 代写 代写 CIFAR-10 Implementing a Convolutional Neural Network n=’relu’, padding=’same’): Add a 2D convolution layer with 128 filters, a kernel size of 3x3, ReLU ac-
tivation, and same padding.
– ****BatchNormalization(): Add a batch normalization layer.
– ****Conv2D(128, (3, 3), activation=’relu’, padding=’same’): Add another 2D convolution layer with the same specifications as above.
– ****BatchNormalization(): Add another batch normalization layer.
– ****MaxPooling2D((2, 2)): Add a max pooling layer with a pool size of 2x2.
– ****Dropout(0.4): Add a dropout layer with a rate of 0.4.
– ****Flatten(): Add aflatten layer to convert 2D matrices to a 1D vector.
– ****Dense(256, activation=’relu’): Add a dense layer with 256 units and ReLU activation.
– ****BatchNormalization(): Add a batch normalization layer.
– ****Dropout(0.4): Add a dropout layer with a rate of 0.4.
– ****Dense(10, activation=’softmax’): Add a final dense layer with
10 units and softmax activation for classification.
• Refer to the Keras Sequential model documentation for more details.
2.7 Step ****7: Implement ****EarlySto pping ****Callback
• Implement EarlyStopping callback to stop training when a monitored metric has stopped improving.
• Use the following parameters:
– ****monitor=’val loss’ : Monitor the validation loss.
– ****patience=5: Number of epochs with no improvement after which training will be stopped.
– restore best weights=True: Restore the model weights from the epoch with the best value of the monitored quantity.
• Refer to the Keras EarlyStopping documentation for more details.
2.8 Step ****8: Compile ****the ****Model
• Compile the model using the compile method.
• Use the following parameters:
– ****optimizer=’adam’ : Set the optimizer to Adam.
– ****loss=’categorical crossentropy’ : Set the loss function to cate- gorical crossentropy.
– ****metrics=[’accuracy’]: Set the metric to accuracy.
• Refer to the Keras model compile documentation for more details.
2.9 Step ****9: Train ****the ****Model
• Train the model using the fit method with the data generator.
• Use the following parameters:
– ****batch size=128: Set the batch size to 128.
– epochs=10: Set the number of epochs to 10.
– ****validation data=(test images, test labels): Pass the test im- ages and labels for validation.
– ****callbacks=[lr scheduler, reduce lr, early stopping]: Pass the learning rate scheduler, reduce learning rate on plateau, and early stopping callbacks.
• Refer to the Keras model fit documentation for more details.
2.10 Step ****10: Evaluate ****the ****Model
• Evaluate the model using the evaluate method on the test dataset.
• Print the test accuracy.
• Refer to the Keras model evaluate documentation for more details.
2.11 Step ****11: Plot ****t he ****Training ****and ****Validation ****Metrics
• Plot the training and validation accuracy and loss using matplotlib.
• Create two subplots: one for accuracy and one for loss.
• Use the plt .subplot, plt.plot, plt.legend, and plt .title functions to create the plots.
• Refer to the Matplotlib documentation for more details.
Submission
Submit your Jupyter notebook on Canvas. Ensure that your code is well- documented and includes explanations of each step. The total points for this assignment are 50. The deadline for submission is August ****5 th ****at ****11:59
WX:codinghelp