public void Train() { // Read all training data and transforming them. trainingData = new DataSetReader(Parameter.TrainingFile, Parameter.InputSize, Parameter.TargetSize); double[][] data, target; trainingData.ReadAll(out data, out target); for (int i = 0; i < trainingData.Count; ++i) { // transform input level 1 for (int j = 0; j < Parameter.InputSize; ++j) { data[i][j] = inputTransformers1[j].TransformToValue(data[i][j]); } // transform input level 2 data[i] = inputTransformers2.TransformToDimension(data[i]); // transform target target[i] = targetTransform.TransformToDimension(target[i]); } oldArtAWeights = new List <double[]>(); bool isWeightsChanged = true, completedLimited = false; // Order input and target pattern before. if (param.Mode == ProcessModifiedHybridFuzzyARTMapMode.EXTERNAL || param.Mode == ProcessModifiedHybridFuzzyARTMapMode.DUAL) { mcoa.OrderSequence(data, target); } do { SaveOldWeights(); // Training ordered fuzzy art map if (param.Mode == ProcessModifiedHybridFuzzyARTMapMode.EXTERNAL) { fartmap.Run(data, target); } else { mfartmap.Run(data, target); } double mseValue = CalculateMse(); if (mseValue < Parameter.LimitedMseValue) { isWeightsChanged = false; } performanceCounter.Increment(); if (param.LimitedEpochs != 0 && param.LimitedEpochs <= performanceCounter.Count) { completedLimited = true; } }while (!completedLimited && isWeightsChanged); }
public void Run(double[][] data, double[][] target) { // Order input sequence with min-max clustering algorithms. if (dataSequence != data || targetSequence != target) { orderingAlgorithms.OrderSequence(data, target); dataSequence = data; targetSequence = target; } // Run simplified FuzzyARTMap neural network. fuzzyARTMap.Run(dataSequence, targetSequence); }
public void Train() { oldArtAWeights = new List <double[]>(); bool isWeightsChanged = true, completedLimited = false; do { SaveOldWeights(); trainingData = new DataSetReader(Parameter.TrainingFile, Parameter.InputSize, Parameter.TargetSize); double[] data = new double[Parameter.InputSize]; double[] target = new double[Parameter.TargetSize]; while (trainingData.Read(data, target)) { // transform input level 1 for (int i = 0; i < Parameter.InputSize; i++) { data[i] = inputTransformers1[i].TransformToValue(data[i]); } // transform input level 2 double[] dataInput = inputTransformers2.TransformToDimension(data); // transform target double[] targetInput = targetTransform.TransformToDimension(target); network.Run(dataInput, targetInput); } double mseValue = CalculateMse(); if (mseValue < Parameter.LimitedMseValue) { isWeightsChanged = false; } performanceCounter.Increment(); if (parameter.LimitedEpochs != 0 && parameter.LimitedEpochs <= performanceCounter.Count) { completedLimited = true; } }while (!completedLimited && isWeightsChanged); }