Нейросеть не правильно аппроксимирует функцию параболы C#

Рейтинг: 0Ответов: 0Опубликовано: 03.05.2023

Написал сеть, но результаты она дает не точные. первое число - x , второе предсказание сети, а третье то что должно было получится (x^2)

введите сюда описание изображения

  public double Learn(double[] expected, double[,] inputs, int epoch)
    {
        var error = 0.0;
        for (int i = 0; i < epoch; i++)
        {
            for (int j = 0; j < expected.Length; j++)
            {
                var output = expected[j];
                var input = GetRow(inputs, j);

                error += Backpropagation(output, input);
            }
        }

        var result = error / epoch;
    
        return result;
    }
    private double Backpropagation(double exprected, params double[] inputs)
    {
        var actual = Predict(inputs).Output;

        var difference = actual - exprected;

        foreach (var neuron in Layers.Last().Neurons)
        {
            neuron.Learn(difference, Topology.LearningRate);
        }

        for (int j = Layers.Count - 2; j >= 0; j--)
        {
            var layer = Layers[j];
            var previousLayer = Layers[j + 1];

            for (int i = 0; i < layer.NeuronCount; i++)
            {
                var neuron = layer.Neurons[i];

                for (int k = 0; k < previousLayer.NeuronCount; k++)
                {
                    var previousNeuron = previousLayer.Neurons[k];
                    var error = previousNeuron.Weights[i] * previousNeuron.Delta;
                    neuron.Learn(error, Topology.LearningRate);
                }
            }
        }

        var result = difference * difference;
        return result;
    }

Создаю сеть так: введите сюда описание изображения указываю функции активации на каждый слой. учу:

neuralNetwork.Learn(result_set, rand_set, 1000);

Не могу понять почему она дает не точные значения...

Ответы

Ответов пока нет.