internal void Test(out double fullEror, out List <double> realOut, out List <double> learnOut, double learningSetSizePart) { int lernSetSize = (int)(learningSet.Count * learningSetSizePart); fullEror = 0; realOut = new List <double>(); learnOut = new List <double>(); var testSet = learningSet.GetRange(learningSet.Count - lernSetSize, lernSetSize); List <double> realInput = new List <double>(); List <double> fullOutputs = new List <double>(); fullOutputs.AddRange(learningSet[0].Value); for (int i = 0; i < learningSet[learningSet.Count - lernSetSize].Value.Count; i++) { realInput.Add(learningSet[learningSet.Count - lernSetSize].Value[i]); } double error = 0; foreach (var item in testSet) { var output = neuralNetwork.CalculateOutputs(realInput.ToArray()); realOut.AddRange(output); learnOut.AddRange(item.Key); fullOutputs.AddRange(output); for (int i = 0; i < output.Length; i++) { error += Math.Pow((output[i] - item.Value[i]), 2); } realInput.RemoveRange(0, neuralNetwork.OutputLayerSize); realInput.AddRange(output); } fullEror = Math.Sqrt(error); }
//обучение на одном классе private double[] LearningOnOneClass(out double error, double[] nextValues, double[] inputVector) { neuroNet.CalculateOutputs(inputVector); double[] iLOutput = neuroNet.InputLayerOutput; double[] hLOutput = neuroNet.HiddenLayerOutput; double[] oLOutput = neuroNet.OutputLayerOutput; double[] hLInput = neuroNet.HiddenLayerInput; double[] oLInput = neuroNet.OutputLayerInput; //Ошибка на выходе сети double[] errorOnOutput = neuroNet.TrainOutputLayer(oLOutput, learnOutput: nextValues, layerInput: oLInput).ToArray(); //Величины корректировки каждой связи межд вых и скр слоем double[][] corOutToHidden = GetWeightCorrect(errorOnOutput, hLOutput); //Ошибка между вых и скрытым слоем double[] errorOnHidden = neuroNet.TrainHiddenLayer(errorOnOutput, hLInput); //Величины корректировки каждой связи межд скр и вх слоем double[][] corHiddenToInput = GetWeightCorrect(errorOnHidden, iLOutput); neuroNet.CorrectWeights(corOutToHidden, corHiddenToInput, moment); error = 0; for (int i = 0; i < oLOutput.Length; i++) { error += Math.Pow((oLOutput[i] - nextValues[i]), 2); } error = Math.Sqrt(error); return(oLOutput); }