Нейросеть не правильно аппроксимирует функцию параболы C#
Написал сеть, но результаты она дает не точные. первое число - 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);
Не могу понять почему она дает не точные значения...
Источник: Stack Overflow на русском