Learn how to implement a complete, fully functional, deep learning solution for image classification using Keras, TensorFlow and Python.

Deep Learning

In this project you will design and implement a deep learning solution for image classification using the CIFAR-10 dataset.

Goal: to build a deep learning solution that is capable of classifying an input image into one of the 10 categories above.

Learning objective 1: Learn how to implement a complete, fully functional, deep learning solution for image classification using Keras, TensorFlow and Python.

Learning objective 2: Get acquainted with representative contemporary datasets, challenges and problems in computer vision and machine learning.

Learning objective 3: Learn how to use deep neural networks under the paradigm of transfer learning.

Learning objective 4: Demonstrate the ability to perform model selection, fine-tuning, and performance evaluation of different solutions to the same problem.

Procedure:

1. Run "Part 1" of the starter code and ensure that it works as intended. At this point we should have loaded the CIFAR-10 dataset into our notebook.

2. Run "Part 2" of the starter code and ensure that it works as intended. It confirms that the dataset has 50,000 training images and 10,000 test/validation images, that these are color images (3 channels) of size 32-by-32 pixels, and that the distribution of images across the 10 classes is uniform, i.e., this is a balanced dataset. It also shows (random) examples of images in the dataset.

3. Run "Part 3" of the starter code and ensure that it works as intended. You should have a baseline CNN classifier (built from scratch) that we are calling model.

4. Run "Part 4" of the starter code and ensure that it works as intended. It trains the CNN for 40 epochs. Your learning curves should look similar to the ones below.

5. Run "Part 5" of the starter code and ensure that it works as intended. Record the test accuracy of model on the summary table at the end.

6. Inspect the confusion matrix and answer the question below:

QUESTION 1: Which classes are more likely to be misclassified by this model? Does this make intuitive sense?

7. Run "Part 6" of the starter code (up to the end of "Attempt #1") and ensure that it works as intended. Record the test accuracy of model_1 on the summary table at the end.

8. Run the rest of "Part 6" of the starter code ("Attempt #2") and ensure that it works as intended. Record the test accuracy of model_4 on the summary table at the end.

9. (OPTIONAL) Change the code for "Attempt #2" (or create your own "Attempt #3") and test it. If the test accuracy results are better than any of the previous networks, report it in (i.e., add another row to) the summary table.

QUESTION 2: Both attempts at transfer learning have resulted in rather disappointing results for validation/test accuracy. What seems to be the problem here?

10. Prepare your report, with all relevant plots, code snippets, numerical values and - most importantly - your insights and lessons learned.