Package aima.core.learning.neural

Source Code of aima.core.learning.neural.Perceptron

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;
  }
}
TOP

Related Classes of aima.core.learning.neural.Perceptron

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.