Neuroph

org.neuroph.core.learning
Class SupervisedLearning

java.lang.Object
  extended by java.util.Observable
      extended by org.neuroph.core.learning.LearningRule
          extended by org.neuroph.core.learning.IterativeLearning
              extended by org.neuroph.core.learning.SupervisedLearning
All Implemented Interfaces:
java.io.Serializable, java.lang.Runnable
Direct Known Subclasses:
LMS

public abstract class SupervisedLearning
extends IterativeLearning
implements java.io.Serializable

Base class for all supervised learning algorithms. It extends IterativeLearning, and provides general supervised learning principles.

See Also:
Serialized Form

Field Summary
protected  double maxError
          Max allowed network error (condition to stop learning)
protected  double previousEpochError
          Total network error in previous epoch
protected  double totalNetworkError
          Total network error TODO: this field should be transient in future
 
Fields inherited from class org.neuroph.core.learning.IterativeLearning
currentIteration, iterationsLimited, learningRate, maxIterations
 
Fields inherited from class org.neuroph.core.learning.LearningRule
neuralNetwork
 
Constructor Summary
SupervisedLearning()
          Creates new supervised learning rule
SupervisedLearning(NeuralNetwork network)
          Creates new supervised learning rule and sets the neural network to train
 
Method Summary
 void doLearningEpoch(TrainingSet trainingSet)
          This method implements basic logic for one learning epoch for the supervised learning algorithms.
protected  boolean errorChangeStalled()
          Returns true if absolute error change is sufficently small (<=minErrorChange) for minErrorChangeStopIterations number of iterations
 double getMaxError()
          Returns learning error tolerance - the value of total network error to stop learning.
 double getMinErrorChange()
          Returns min error change stopping criteria
 int getMinErrorChangeIterationsCount()
          Returns number of iterations count for for min error change stopping criteria
 int getMinErrorChangeIterationsLimit()
          Returns number of iterations for min error change stopping criteria
protected  java.util.Vector<java.lang.Double> getPatternError(java.util.Vector<java.lang.Double> output, java.util.Vector<java.lang.Double> desiredOutput)
          Calculates the network error for the current pattern - diference between desired and actual output
 double getPreviousEpochError()
          Returns total network error in previous learning epoch
 java.lang.Double getTotalNetworkError()
          Returns total network error in current learning epoch
protected  boolean hasReachedStopCondition()
          Returns true if stop condition has been reached, false otherwise.
 void learn(TrainingSet trainingSet, double maxError)
          Trains network for the specified training set and number of iterations
 void learn(TrainingSet trainingSet, double maxError, int maxIterations)
          Trains network for the specified training set and number of iterations
protected  void learnPattern(SupervisedTrainingElement trainingElement)
          Trains network with the pattern from the specified training element
protected  void reset()
          Reset the iteration counter
 void setMaxError(double maxError)
          Sets allowed network error, which indicates when to stopLearning training
 void setMinErrorChange(double minErrorChange)
          Sets min error change stopping criteria
 void setMinErrorChangeIterationsLimit(int minErrorChangeIterationsLimit)
          Sets number of iterations for min error change stopping criteria
protected abstract  void updateNetworkWeights(java.util.Vector<java.lang.Double> patternError)
          This method should implement the weights update procedure
protected abstract  void updateTotalNetworkError(java.util.Vector<java.lang.Double> patternError)
          Subclasses update total network error for each training pattern with this method.
 
Methods inherited from class org.neuroph.core.learning.IterativeLearning
doOneLearningIteration, getCurrentIteration, getLearningRate, isPausedLearning, learn, learn, pause, resume, setLearningRate, setMaxIterations
 
Methods inherited from class org.neuroph.core.learning.LearningRule
getNeuralNetwork, getTrainingSet, isStopped, notifyChange, run, setNeuralNetwork, setTrainingSet, stopLearning
 
Methods inherited from class java.util.Observable
addObserver, clearChanged, countObservers, deleteObserver, deleteObservers, hasChanged, notifyObservers, notifyObservers, setChanged
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

totalNetworkError

protected double totalNetworkError
Total network error TODO: this field should be transient in future


previousEpochError

protected transient double previousEpochError
Total network error in previous epoch


maxError

protected double maxError
Max allowed network error (condition to stop learning)

Constructor Detail

SupervisedLearning

public SupervisedLearning()
Creates new supervised learning rule


SupervisedLearning

public SupervisedLearning(NeuralNetwork network)
Creates new supervised learning rule and sets the neural network to train

Parameters:
network - network to train
Method Detail

learn

public void learn(TrainingSet trainingSet,
                  double maxError)
Trains network for the specified training set and number of iterations

Parameters:
trainingSet - training set to learn
maxError - maximum numberof iterations to learn

learn

public void learn(TrainingSet trainingSet,
                  double maxError,
                  int maxIterations)
Trains network for the specified training set and number of iterations

Parameters:
trainingSet - training set to learn
maxIterations - maximum numberof iterations to learn

reset

protected void reset()
Description copied from class: IterativeLearning
Reset the iteration counter

Overrides:
reset in class IterativeLearning

doLearningEpoch

public void doLearningEpoch(TrainingSet trainingSet)
This method implements basic logic for one learning epoch for the supervised learning algorithms. Epoch is the one pass through the training set. This method iterates through the training set and trains network for each element. It also sets flag if conditions to stop learning has been reached: network error below some allowed value, or maximum iteration count

Specified by:
doLearningEpoch in class IterativeLearning
Parameters:
trainingSet - training set for training network

hasReachedStopCondition

protected boolean hasReachedStopCondition()
Returns true if stop condition has been reached, false otherwise. Override this method in derived classes to implement custom stop criteria.

Returns:
true if stop condition is reached, false otherwise

errorChangeStalled

protected boolean errorChangeStalled()
Returns true if absolute error change is sufficently small (<=minErrorChange) for minErrorChangeStopIterations number of iterations

Returns:
true if absolute error change is stalled (error is sufficently small for some number of iterations)

learnPattern

protected void learnPattern(SupervisedTrainingElement trainingElement)
Trains network with the pattern from the specified training element

Parameters:
trainingElement - supervised training element which contains input and desired output

getPatternError

protected java.util.Vector<java.lang.Double> getPatternError(java.util.Vector<java.lang.Double> output,
                                                             java.util.Vector<java.lang.Double> desiredOutput)
Calculates the network error for the current pattern - diference between desired and actual output

Parameters:
output - actual network output
desiredOutput - desired network output
Returns:
pattern error

setMaxError

public void setMaxError(double maxError)
Sets allowed network error, which indicates when to stopLearning training

Parameters:
maxError - network error

getMaxError

public double getMaxError()
Returns learning error tolerance - the value of total network error to stop learning.

Returns:
learning error tolerance

getTotalNetworkError

public java.lang.Double getTotalNetworkError()
Returns total network error in current learning epoch

Returns:
total network error in current learning epoch

getPreviousEpochError

public double getPreviousEpochError()
Returns total network error in previous learning epoch

Returns:
total network errorin previous learning epoch

getMinErrorChange

public double getMinErrorChange()
Returns min error change stopping criteria

Returns:
min error change stopping criteria

setMinErrorChange

public void setMinErrorChange(double minErrorChange)
Sets min error change stopping criteria

Parameters:
minErrorChange - value for min error change stopping criteria

getMinErrorChangeIterationsLimit

public int getMinErrorChangeIterationsLimit()
Returns number of iterations for min error change stopping criteria

Returns:
number of iterations for min error change stopping criteria

setMinErrorChangeIterationsLimit

public void setMinErrorChangeIterationsLimit(int minErrorChangeIterationsLimit)
Sets number of iterations for min error change stopping criteria

Parameters:
minErrorChangeIterationsLimit - number of iterations for min error change stopping criteria

getMinErrorChangeIterationsCount

public int getMinErrorChangeIterationsCount()
Returns number of iterations count for for min error change stopping criteria

Returns:
number of iterations count for for min error change stopping criteria

updateTotalNetworkError

protected abstract void updateTotalNetworkError(java.util.Vector<java.lang.Double> patternError)
Subclasses update total network error for each training pattern with this method. Error update formula is learning rule specific.

Parameters:
patternError - pattern error vector

updateNetworkWeights

protected abstract void updateNetworkWeights(java.util.Vector<java.lang.Double> patternError)
This method should implement the weights update procedure

Parameters:
patternError - pattern error vector

Neuroph