/AIPND-Image_Classifier

Build a Python application that can train an image classifier on a dataset, then predict new images using the trained model.

Primary LanguageHTML

Image Classifier

Table of Contents

  1. Project Motivation
  2. File Descriptions
  3. Required Libraries
  4. Instructions
  5. Results

Project Motivation

Image Classifier Project is a requirement to complete the AI Programming with Python Nanodegree Program of udacity academy.

The project goal is to build a Python application that can train an image classifier on a dataset, then predicts new images using the trained model. For this purpose, I built and trained an image classifier to recognize different species of flowers. I used this dataset of 102 flower categories, you can see a few examples below.

The project is broken down into multiple steps:

  • Load and preprocess the image dataset
  • Train the image classifier on your dataset
  • Use the trained classifier to predict image content

File Descriptions

  • Image Classifier Project.ipynb: a Jupyter notebook, contains the whole project code to build and train an image classifier.
  • train.py: trains a new network on a dataset and saves the model as a checkpoint.
  • predict.py: uses a trained network to predict the class for an input image.
  • cat_to_name.json: a JSON object which gives you a dictionary mapping the integer encoded categories to the actual names of the flowers.

Required Libraries

Instructions

  • Train a new network on a data set with train.py

    • Basic usage: python train.py data_directory
    • Prints out training loss, validation loss, and validation accuracy as the network trains
    • Options:
      • Set directory to save checkpoints: python train.py data_dir --save_dir save_directory
      • Choose architecture: python train.py data_dir --arch "vgg13"
      • Set hyperparameters: python train.py data_dir --learning_rate 0.01 --hidden_units 512 --epochs 20
      • Use GPU for training: python train.py data_dir --gpu
  • Predict flower name from an image with predict.py along with the probability of that name. That is, you'll pass in a single image /path/to/image and return the flower name and class probability.

    • Basic usage: python predict.py /path/to/image checkpoint
    • Options:
      • Return top K most likely classes: python predict.py input checkpoint --top_k 3
      • Use a mapping of categories to real names: python predict.py input checkpoint --category_names cat_to_name.json
      • Use GPU for inference: : Use GPU for inference: python predict.py input checkpoint --gpu

Results

  • The testing accuracy of the trained network on the 10000 test images is 89%.
  • For sanity checking, I tested the trained network on the english marigold flower, and returned the top 5 classes. As a result, it gave the correct class, the highest probability.