public ResilientBackpropagationLearning( ActivationNetwork network )
{
this.network = network;
int layersCount = network.Layers.Length;
neuronErrors = new double[layersCount][];
weightsDerivatives = new double[layersCount][][];
thresholdsDerivatives = new double[layersCount][];
weightsPreviousDerivatives = new double[layersCount][][];
thresholdsPreviousDerivatives = new double[layersCount][];
weightsUpdates = new double[layersCount][][];
thresholdsUpdates = new double[layersCount][];
// initialize errors, derivatives and steps
for ( int i = 0; i < network.Layers.Length; i++ )
{
Layer layer = network.Layers[i];
int neuronsCount = layer.Neurons.Length;
neuronErrors[i] = new double[neuronsCount];
weightsDerivatives[i] = new double[neuronsCount][];
weightsPreviousDerivatives[i] = new double[neuronsCount][];
weightsUpdates[i] = new double[neuronsCount][];
thresholdsDerivatives[i] = new double[neuronsCount];
thresholdsPreviousDerivatives[i] = new double[neuronsCount];
thresholdsUpdates[i] = new double[neuronsCount];
// for each neuron
for ( int j = 0; j < layer.Neurons.Length; j++ )
{
weightsDerivatives[i][j] = new double[layer.InputsCount];
weightsPreviousDerivatives[i][j] = new double[layer.InputsCount];
weightsUpdates[i][j] = new double[layer.InputsCount];
}
}
// intialize steps
ResetUpdates( learningRate );
}