public void Run() { if (TrainingDataTable == null) { throw new Exception("Training Engine (ID = " + ID.ToString() + " cannot start training because TrainingDataTable is Empty/NULL/Invalid"); } for (patternIndex = 0; patternIndex < InputPatternCount; patternIndex++) { patternRow = _TrainingData.Rows[patternIndex]; _RuntimeEngine.PatternRow = patternRow; _RuntimeEngine.Run(); //Feed Farword //Feed Backwork //Progress report // _NeuralNetwork.RaiseTaskProgressEvent(this ,((((float)(patternIndex + 1)) / ((float)(InputPatternCount))) * 100) ,"Training Engine Learning Pattern No: " + patternIndex.ToString() + " of " + InputPatternCount.ToString()); } }
public void Run() { if (_ValidationDataTable == null) { throw new Exception("Validation Engine (ID = " + ID.ToString() + " cannot start training because TrainingDataTable is Empty/NULL/Invalid"); } _MCCCalculator.Reset(); for (patternIndex = 0; patternIndex < InputPatternCount; patternIndex++) { //Feed Farword patternRow = _ValidationDataTable.Rows[patternIndex]; _RuntimeEngine.PatternRow = patternRow; y = _RuntimeEngine.Run(); //Feed Backword //OutputLayer:- dpj=(Tpj-Ypj) Ypj (1-Ypj) t = float.Parse(patternRow[_OutputAttribute].ToString()); predictionResult = _MCCCalculator.Update(t, y); _NeuralNetwork.RaiseTaskProgressEvent(this, 0.00f, "Validation result of pattern no. " + ((int)(patternIndex + 1)).ToString() + " is T = " + t.ToString() + " and Y = " + y.ToString() + " difference is: " + ((float)(t - y)).ToString() + " [" + predictionResult + "]"); } }
public void Run() { if (TrainingDataTable == null) { throw new Exception("Training Engine (ID = " + ID.ToString() + " cannot start training because TrainingDataTable is Empty/NULL/Invalid"); } _MCCCalculator.Reset(); _TSSE = 0.00f; _RMSE = 0.00f; for (patternIndex = 0; patternIndex < InputPatternCount; patternIndex++) { //Feed Farword patternRow = _TrainingData.Rows[patternIndex]; _RuntimeEngine.PatternRow = patternRow; y = _RuntimeEngine.Run(); //Feed Backword //OutputLayer:- dpj=(Tpj-Ypj) Ypj (1-Ypj) t = float.Parse(patternRow[_OutputAttribute].ToString()); _MCCCalculator.Update(t, y); error = ((t - y) * y * (1 - y)); neuron = _NeuralNetwork._OutputLayer._ListOfNeurons[0]; _NeuronErrorDictionary[neuron.ID] = error; //Compute TSSE and RMSE _TSSE = _TSSE + ((t - y) * (t - y)) / 2; _RMSE = (float)Math.Sqrt((2 * _TSSE) / InputPatternCount); //HiddenLayer:- dpj= Ypj (1-Ypj) Sum(&pk Wkj); where &pk is the error post synaptic neuron k totalLayers = _NeuralNetwork._ListOfLayers.Count; for (hiddenLayerIndex = totalLayers - 2; hiddenLayerIndex > 0; hiddenLayerIndex--) { layer = _NeuralNetwork._ListOfLayers[hiddenLayerIndex]; totalNeurons = layer._ListOfNeurons.Count; for (neuronIndex = 0; neuronIndex < totalNeurons; neuronIndex++) { neuron = layer._ListOfNeurons[neuronIndex]; y = neuron._Value; postSynapticErrorSignal = 0; postLayer = _NeuralNetwork._ListOfLayers[hiddenLayerIndex + 1]; for (postSynapticNeuronIndex = 0; postSynapticNeuronIndex < postLayer._ListOfNeurons.Count; postSynapticNeuronIndex++) { postSynapticNeuron = postLayer._ListOfNeurons[postSynapticNeuronIndex]; postSynapticNeuronError = _NeuronErrorDictionary[postSynapticNeuron.ID]; postSynapticConnection = _NeuralNetwork._SourceTargetNeuronSynapticDictionary[neuron.ID.ToString() + "-" + postSynapticNeuron.ID.ToString()]; postSynapticErrorSignal = postSynapticErrorSignal + (postSynapticNeuronError * postSynapticConnection._Weight); } error = y * (1 - y) * postSynapticErrorSignal; _NeuronErrorDictionary[neuron.ID] = error; } } //Change Weights for (synapticIndex = 0; synapticIndex < _NeuralNetwork._ListOfSynapticConnections.Count; synapticIndex++) { synaptic = _NeuralNetwork._ListOfSynapticConnections[synapticIndex]; deltaWeight = synaptic._SourceNeuron._Value * _NeuronErrorDictionary[synaptic._TargetNeuron.ID] * _NeuralNetwork._LearningRate; synaptic._Weight = synaptic._Weight + deltaWeight + (_Momentum * _PreviousWeightDictionary[synaptic.ID]); _PreviousWeightDictionary[synaptic.ID] = deltaWeight; } //Progress report // _NeuralNetwork.RaiseTaskProgressEvent(this ,((((float)(patternIndex + 1)) / ((float)(InputPatternCount))) * 100) ,"Training Engine Learning Pattern No: " + patternIndex.ToString() + " of " + InputPatternCount.ToString()); } }