private void ShowMessage(string message) { string logString = $"{Time.ToString("HH:mm:ss")} # {VehicleBrand} {Model} - {message}"; Console.WriteLine(logString); LogString.Add(logString); }
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"); }
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"); }
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); }