示例#1
0
        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);
        }
示例#2
0
        //обучение на одном классе
        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);
        }