Neural Networks Crash Tutorial - Keras version

Classifying images with Neural Networks

This notebook is inspired by lots of tutorials on the web. It's first part uses the same data and shares the same objectives as with:

The data necessary to run this notebook can be downloaded from:

Look for the two zip files, and in the section Anotations next to the label "BelgiumTS for Classification (cropped images)".

This notebook assumes that the images will be in a directory named BelgiumTrafficSigns with subdirectories Training and Testing.

You will need jupyter notebook and tensorflow to be installed. You will also need the following packages:

  • numpy
  • scipy
  • matplotlib
  • scikit-image
  • keras

Most if not all of these packages may already be installed for you.


Here are some useful functions:

In [1]:
import os,

def load_data(data_directory):
    directories = [d for d in os.listdir(data_directory) 
                   if os.path.isdir(os.path.join(data_directory, d))]
    labels = []
    images = []
    for d in directories:
        label_directory = os.path.join(data_directory, d)
        file_names = [os.path.join(label_directory, f) 
                      for f in os.listdir(label_directory) 
                      if f.endswith(".ppm")]
        for f in file_names:
    return images, labels
In [2]:
def plot_images(images, labels, color_map = "brg"):
    # Get the unique labels 
    unique_labels = set(labels)

    # Initialize the figure
    plt.figure(figsize=(15, 15))

    # Set a counter
    i = 1

    # For each unique label,
    for label in unique_labels:
        # You pick the first image for each label
        image = images[labels.index(label)]
        # Define 64 subplots 
        plt.subplot(8, 8, i)
        # Don't include axes
        # Add a title to each subplot 
        plt.title("Label {0} ({1})".format(label, labels.count(label)))
        # Add 1 to the counter
        i += 1
        # And you plot this first image 
        plt.imshow(image, cmap=color_map)
    # Show the plot

Load training data

In [3]:
train_data_directory = "./BelgiumTrafficSigns/Training"
images, labels = load_data(train_data_directory)

Plot histogram of labels to see how the images are distributed

In [4]:
# Import the `pyplot` module of matplotlib
import matplotlib.pyplot as plt 

# Make a histogram with 62 bins of the `labels` data
plt.hist(labels, 62)

# Show the plot

Check out some random images and their shapes:

In [5]:
import random

# Determine the (random) indexes of the images that you want to see 
traffic_signs = random.sample(range(len(images)), 4)

# Fill out the subplots with the random images and add shape
for i in range(len(traffic_signs)):
    plt.subplot(1, 4, i+1)
    print("shape: {0}".format(images[traffic_signs[i]].shape))
shape: (136, 142, 3)
shape: (116, 115, 3)
shape: (72, 71, 3)
shape: (60, 56, 3)

Plot first sample from each category:

In [6]: