Computational Intelligence, SS08
2 VO 442.070 + 1 RU 708.070 last updated:
Course Notes (Skriptum)
Online Tutorials
Practical Course Slides
Animated Algorithms
Artificial Neuron
Multi Layer Perceptron
RBF Networks
Optical Character Recognition
Gaussian Mixture Model
Principal Component Analysis
Interactive Tests
Key Definitions
Literature and Links

OCR with Multi-Layer Perceptrons


This applet illustrates some pattern recognition capabilities of the multi-layer perceptrons with an Optical Character Recognition (OCR) application. A database is used to learn handwritten digits ranging from 0 to 9. Then, the user can draw digits himself, and try to make the perceptron recognize them.


The original applet was written by Olivier Michel.


A database of bitmaps is used to learn to recognize handwritten figures between 0 and 9. Each bitmap is a 15x20 binary map representing an handwritten digit. 100 samples (10 for each digit) were drawn by hand, with a computer mouse. The input layer of the neural network fcontains 80 neurons representing a 8x10 matrix corresponding to a subsampling of the actual sample matrix. For each input unit, a preprocessing module computes a value equal to the average of the four corresponding input pixels of the input matrix. The output layer is made up of 10 units, each one indicating a symbolic value for the digit recognized.



  1. Learning: How many iterations are necessary to make the error reach 0 on the training set ? Which parameters (learning rate, momentum, number of hidden units) provide an optimal compromise between performance and time of convergence ?
  2. Learning: Try to find optimal parameters for a neural network witout hidden layer (set the H1 value to 0, or simply delete it). How good is the performance compared to that of larger  networks ? What is your conclusion regarding the separability of the classes in the learning set ?
  3. Testing: Try to draw digits with the mouse and test the answer of the neural network. Do you think there are good generalization properties ? How can you explain this ?
  4. Improving the learning: In order to get better results when testing, how can you change the learning so that generalization is better ? Does early stopping provides better results ?