C#上的多层感知器

时间:2019-01-22 12:13:55

标签: c# machine-learning neural-network

我正在尝试制作可以正确输出XOR的多层感知器。

我有以下问题。请看一下我的神经网络,告诉我我的错误在哪里,为什么我的神经网络收敛到答案0.45?

我检查的权重,我没有发现溢出,到处都是权重小于1的情况,因此很可能不是神经网络瘫痪。如果您需要澄清一些内容,请随时写。

错误图:

enter image description here

绝对(错误)图enter image description here

注意:

  
      
  1. 我到处都有偏见1
  2.   
  3. 学习速度越慢,收敛到0.45的速度就越慢
  4.   
//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;
}

0 个答案:

没有答案