All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.learning.neural.Perceptron Maven / Gradle / Ivy

Go to download

AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.

The newest version!
package aima.core.learning.neural;

import aima.core.util.math.Matrix;
import aima.core.util.math.Vector;

/**
 * @author Ravi Mohan
 * @author Mike Stampone
 */
public class Perceptron implements FunctionApproximator {

	private final Layer layer;
	private Vector lastInput;

	public Perceptron(int numberOfNeurons, int numberOfInputs) {

		this.layer = new Layer(numberOfNeurons, numberOfInputs, 2.0, -2.0,
				new HardLimitActivationFunction());

	}

	public Vector processInput(Vector input) {
		lastInput = input;
		return layer.feedForward(input);
	}

	public void processError(Vector error) {
		Matrix weightUpdate = error.times(lastInput.transpose());
		layer.acceptNewWeightUpdate(weightUpdate);

		Vector biasUpdate = layer.getBiasVector().plus(error);
		layer.acceptNewBiasUpdate(biasUpdate);

	}

	/**
	 * Induces the layer of this perceptron from the specified set of examples
	 * 
	 * @param innds
	 *            a set of training examples for constructing the layer of this
	 *            perceptron.
	 * @param numberofEpochs
	 *            the number of training epochs to be used.
	 */
	public void trainOn(NNDataSet innds, int numberofEpochs) {
		for (int i = 0; i < numberofEpochs; i++) {
			innds.refreshDataset();
			while (innds.hasMoreExamples()) {
				NNExample nne = innds.getExampleAtRandom();
				processInput(nne.getInput());
				Vector error = layer.errorVectorFrom(nne.getTarget());
				processError(error);
			}
		}
	}

	/**
	 * Returns the outcome predicted for the specified example
	 * 
	 * @param nne
	 *            an example
	 * 
	 * @return the outcome predicted for the specified example
	 */
	public Vector predict(NNExample nne) {
		return processInput(nne.getInput());
	}

	/**
	 * Returns the accuracy of the hypothesis on the specified set of examples
	 * 
	 * @param nnds
	 *            the neural network data set to be tested on.
	 * 
	 * @return the accuracy of the hypothesis on the specified set of examples
	 */
	public int[] testOnDataSet(NNDataSet nnds) {
		int[] result = new int[] { 0, 0 };
		nnds.refreshDataset();
		while (nnds.hasMoreExamples()) {
			NNExample nne = nnds.getExampleAtRandom();
			Vector prediction = predict(nne);
			if (nne.isCorrect(prediction)) {
				result[0] = result[0] + 1;
			} else {
				result[1] = result[1] + 1;
			}
		}
		return result;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy