我正在尝试制作可以正确输出XOR的多层感知器。
我有以下问题。请看一下我的神经网络,告诉我我的错误在哪里,为什么我的神经网络收敛到答案0.45?
我检查的权重,我没有发现溢出,到处都是权重小于1的情况,因此很可能不是神经网络瘫痪。如果您需要澄清一些内容,请随时写。
错误图:
注意:
- 我到处都有偏见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;
}