The following list contains additional information and comments about the project.
This page describes the Neural Network assignment of the course COMP 4360 Machine Learning.
In this assignment you will implement a simple back-propagation neural network using sigmoid activation functions. In this part of the assignment, you must implement a back-propagation network as described in class using sigmoid activation function without a momentum term. Implement a learning rate α=0.1. The input and hidden layer as well as the hidden and output layer are fully connected as shown in . Use an activation level of 0.1 for 0 and 0.9 for 1. Don’t forget to add a constant -1 as offset term to the inputs and connect it to all nodes in the hidden and output layer to act as offset term.
In the first part of the assignment, you will implement a simple 4-bit counter using a neural network. The network for the counter consists of 4 input nodes, nh hidden nodes, and 4 output nodes. The input to the counter is a number between 0 and 15 in binary (e.g., 11=%1011) and the output of the counter network is the binary presentation of the input number + 1 (e.g., 12=%1100). The architecture of the network for the counter is shown in Figure 1.
Figure 1: Architecture of the Counter Neural Network
Try different number of nodes in the hidden layer from 1 to 7 hidden nodes. Randomly select four of the possible sixteen input patterns as validation set. Compare the accuracy of your system on the test set and the training set. Determine the best number of hidden nodes.
Show the results of your tests in a table similar to this one
Number of Hidden Nodes
Bit Errors Training
Bit Errors Testing
In this test, the network with five hidden nodes performed best.
In the HuroCup Sprint event, a robot has to walk forwards and backwards in a 50cm lane for 3.0m. This year, we would like to use a novel target pattern as shown in the picture below and in this sprint marker youtube video.
The idea is that the robot can identify the direction of the track by looking at the relative shift of the yellow/black and green/red line.
The input to the network will be a set of images with associated offsets and distance along the centre line information. The offset and the distance are encoded in the filenames. You can download the images here.
For example, the image file named
corresponds to a picture taken when the robot was 50cm to the right of the centre line and 106cm along the centre line to the target.
This scenario is shown in the drawing below.
Some sample images are shown below.
There are a total of 1400 images in the training set. Each image is in the RGB PPM file format. The PPM file format consists of three header lines
which represents a magic header (P6 for RGB colour images), the image width and height in ASCII on the next line, and the number of colours in ASCII per RGB band. Following this header is a width * height * 3 sized array of binary data which corresponds to RGB pixels. Each channel (R,G,B) is one byte.
Create a neural network that is able to predict the offset and distance to the target given a set of training images.
Unless otherwise specified use 50% of the images for training and test the accuracy of your algorithm with the remaining 50%. Use a uniform distribution to sample from the set of images to create the training and testing sets.
Convert the image date into training data by scaling the RGB channels to be between 0 and 1 by dividing by 255.
The original size of the images is 320x240, which would result in a very large input vector and number of nodes. Therefore, you should subsample the image first and reduce it to a 32x24 sized image. The easiest way to subsample the image is to simply take every nth pixel only.
Each network uses seven output nodes for the direction (105l,100l,050l,000l,050r,100r, and 150r) and five output nodes for the distance along the centre line (200cm, 150cm, 100cm, 50cm, and 0cm).
In the first experiments the output is determined by the node with the maximum output resulting in a discretization of 50cm in the offset and 50cm in the distance along the centre line.
Create a network with 32*24*3 input nodes in the first layer. Convert the pixels into training data by scaling the RGB channels to be between 0 and 1 by dividing by 255.
Rerun the experiments described above and compare the performance of the network when using greyscale images. Convert every RGB pixel into a greyscale value (Grey=(R+G+B)/3) and create a network with 32*24 input nodes and the same number of output nodes as in the experiments using colour images.
Compare the performance of the networks for colour and greyscale images using from 1 to 7 hidden nodes.
Show the dependence of the ANN to the number of training examples used. That is, show in a table the performance of the colour image network using 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200, 250, and 300 training examples.
To hand in your assignment:
You should receive a response saying how many bytes were handed in - all of the files you put in your handin directory are compressed for handin, so the number reported may seem unusually small.
If you change your mind about what is handed in or think you've made a mistake, you can enter the handin command as often as you want, each new handin will erase the old. Remember there is a hard deadline on the due date, at which point the handin system will be disabled.
When marking your assignments, the marker will get a copy of everything you placed in the directory. They will start a telnet unix session, cd into your source directory. Depending on the programming language that you have used they will either: (a) execute make , followed by ./a.out [args] in case of C or C++, or (b) javac *.java followed by java ass2 [args] in case of a Java submission.
You will get an email back to the cc account you used to do the handin after the marker is finished. Please ensure the mail on this account is not forwarded elsewhere.