In forward propagation 316, a set of weights are applied to the input data 318, 320 to calculate an output 324. For the first forward propagation, the set of weights are selected randomly. In back propagation 322 a measurement is made the margin of error of the output 324 and the weights are adjusted to decrease the error. Back propagation 322 compares the output that the neural network 302 produces with the output that the neural network 302 was meant to produce, and uses the difference between them to modify the weights of the connections between the nodes of the neural network 302, starting from the output layer 314 through the hidden layers 312 to the input layer 310, i.e., going backward in the neural network 302. In time, back propagation 322 causes the neural network 302 to learn, reducing the difference between actual and intended output to the point where the two exactly coincide. Thus, the neural network 302 is configured to repeat both forward and back propagation until the weights (and potentially the biases) of the neural network 302 are calibrated to accurately predict an output.