Я пытаюсь создать многослойный персептрон, который может правильно выводить XOR.
У меня следующая проблема.Пожалуйста, посмотрите на мою нейронную сеть, скажите мне, где моя ошибка, почему моя нейронная сеть сходится к ответу 0,45?
Веса, которые я проверяю, переполнения я не обнаружил, везде веса меньше 1, так что, скорее всего, это не паралич нейронной сети.Если вам нужно что-то уточнить, пишите.
График ошибок:
![enter image description here](https://i.stack.imgur.com/JTVfk.png)
Абс (ошибка) график: ![enter image description here](https://i.stack.imgur.com/CttVl.png)
Примечание:
- У меня смещение везде 1
- Чем медленнее скорость обучения, тем медленнее она приближается к 0,45
//Feed - forward computation
Layers[i].neurons[j].input = 0; Layers[i].neurons[j].output = 0;
for (int k = 0; k < Layers[i].neurons[j].weights.Count; k++)
{
Layers[i].neurons[j].input += Layers[i].neurons[j].weights[k].weigth * Layers[i].neurons[j].weights[k].neuronFrom.output;
}
Layers[i].neurons[j].output = Layers[i].activation(Layers[i].neurons[j].input + Layers[i].neurons[j].bias);
//backpropagation to the output layer
for (int k = 0; k < Layers.Last().neurons.Count; k++)
{
Layers.Last().neurons[k].error = Layers.Last().neurons[k].output * (1 - Layers.Last().neurons[k].output) * (outputs[i][k] - Layers.Last().neurons[k].output);
}
//backpropagated error to the j-th hidden unit
Double sum = 0;
for (int h = 0; h < Layers[k + 1].neurons.Count; h++)
{
sum += Layers[k + 1].neurons[h].error * Layers[k + 1].neurons[h].weights[h].weigth;
}
Layers[k].neurons[j].error = Layers[k].neurons[j].output * (1 - Layers[k].neurons[j].output) * sum;
//Weight updates
for (int h = 0; h < Layers[k].neurons[j].weights.Count; h++)
{
Layers[k].neurons[j].weights[h].weigth += learningRate * Layers[k].neurons[j].error * Layers[k].neurons[j].output;
}