示例#1
0
        private void ShowMessage(string message)
        {
            string logString = $"{Time.ToString("HH:mm:ss")} # {VehicleBrand} {Model} - {message}";

            Console.WriteLine(logString);
            LogString.Add(logString);
        }
示例#2
0
        public void Learning()
        {
            lock (locker)
                LogString.Add("Начало обучения нейронной сети\n");
            int    counter     = 0;
            double globalError = requiredErrorSize + 1;

            while (globalError > requiredErrorSize)
            {
                globalError = 0;
                counter++;
                lock (locker)
                    LogString.Add("Эпоха: " + counter.ToString() + "\n");

                for (int i = 0; i < dataToTrain.TrainSet.Count; i++)
                {
                    layerPerceptron[0].AxonOnPreviousLayer = dataToTrain.TrainSet[i].InputSignal;
                    Calculate();
                    layerPerceptron[layerPerceptron.Length - 1].LearningOutput(dataToTrain.TrainSet[i].ExpectedResponse);

                    for (int j = layerPerceptron.Length - 2; j >= 0; j--)
                    {
                        layerPerceptron[j].LearningHidden(layerPerceptron[j + 1].SummMultiply);
                    }
                    Calculate();
                    CalculateLocalError(i);
                }
                globalError = CalculateGlobalError();
                lock (locker)
                    LogString.Add("Эпоха: " + counter.ToString() + " размер ошибки: " + globalError.ToString() + "\n");
            }
            lock (locker)
                LogString.Add("Нейронная сеть успешно обучилась за " + counter.ToString() + " эпох.\n");
        }
示例#3
0
        private void CalculateLocalError(int indexTask)
        {
            double[] outputArray = new double[sizeOUT];
            outputArray = layerPerceptron[layerPerceptron.Length - 1].AxonLayer;

            double[] answerArray = new double[sizeOUT];
            answerArray = dataToTrain.TrainSet[indexTask].ExpectedResponse;

            double summ = 0;

            for (int i = 0; i < sizeOUT; i++)
            {
                summ += Math.Pow((answerArray[i] - outputArray[i]), 2);
            }

            lock (locker)
                LogString.Add("\tОбучающий сет: " + (indexTask + 1) + " размер локальной ошибки: " + (summ / dataToTrain.TrainSet.Count) + "\n");
        }
示例#4
0
        private double CalculateGlobalError()
        {
            lock (locker)
                LogString.Add("Размер локальных ошибок после прохождения всех сетов:\n");

            double returnErrorValue = 0;
            double tempLocalErrorValue;

            double[] tempAnswerNetwork;
            for (int i = 0; i < dataToTrain.TrainSet.Count; i++)
            {
                tempAnswerNetwork = Calculate(dataToTrain.TrainSet[i].InputSignal);
                for (int j = 0; j < dataToTrain.SizeOut; j++)
                {
                    tempLocalErrorValue = Math.Pow((dataToTrain.TrainSet[i].ExpectedResponse[j] - tempAnswerNetwork[j]), 2) / dataToTrain.TrainSet.Count;
                    returnErrorValue   += tempLocalErrorValue;
                    lock (locker) // TEst
                        LogString.Add("\tОбучающий сет: " + (i + 1) + " размер локальной ошибки: " + tempLocalErrorValue + "\n");
                }
            }
            return(returnErrorValue);
        }