public LevenbergMarquardtTraining(BasicNetwork network,
IMLDataSet training) : base(TrainingImplementationType.Iterative)
{
ValidateNetwork.ValidateMethodToData(network, training);
if (network.OutputCount != 1)
{
throw new TrainingError(
"Levenberg Marquardt requires an output layer with a single neuron.");
}
Training = training;
_indexableTraining = Training;
_network = network;
_trainingLength = (int) _indexableTraining.Count;
_parametersLength = _network.Structure.CalculateSize();
_hessianMatrix = new Matrix(_parametersLength,
_parametersLength);
_hessian = _hessianMatrix.Data;
_alpha = 0.0d;
_beta = 1.0d;
_lambda = 0.1d;
_deltas = new double[_parametersLength];
_gradient = new double[_parametersLength];
_diagonal = new double[_parametersLength];
var input = new BasicMLData(
_indexableTraining.InputSize);
var ideal = new BasicMLData(
_indexableTraining.IdealSize);
_pair = new BasicMLDataPair(input, ideal);
}