The aim of the NeuroOCR project is to produce an artificial neural network capable of learning to recognise different characters (the lowercase and uppercase alphabet as well as the numbers), i.e., approximate the correct 6 Bit binary representation of a hand drawn character inputted as a bitmap image. In achieving this, create a versatile Multi-Layered Neural Network library and implement a supervised backpropagation artificial neural network. Or to put it simply, teach a computer to read.

First of all, to understand how this program works, you must understand the beauty of the supervised backpropagtion neural network. Let me give you a basic introduction to neural networks.

What is a Neural Network?

In simple terms, a Supervised Artificial Neural Network is a model, inspired by biological neural networks, with which you can “teach” a computer to approximate a function by “learning” from datasets of inputs and their corresponding outputs (these inputs and outputs are generally 1 or 0 values). In other words, given inputs and their corresponding outputs, the neural network can “learn” to approximate the function that results in those outputs from those inputs.

How do they Work?

An artificial neural network consists of neurons that are arranged in neuron layers. They can be visualised as shown in the diagram (you can have multiple hidden layers):

Image source: MDPI AG (Basel, Switzerland) link to paper

Each neuron has a number of inputs and outputs. The inputs to that neuron are modified by a weight which can reduce or increase the input value (these weights start off as small, random values – this is to increase neural network training efficiency). To calculate the output of a particular neuron, all of the modified inputs to a the neuron are summed, resulting in the internal value , which is then biased using an Activation Function (). The activation function, in my case, is the sigmoid function . Another commonly used activation function is the threshold function,