如何训练多层感知器?异或门

时间:2018-07-05 10:38:50

标签: machine-learning neural-network xor perceptron

因此,我已经弄清楚了单个感知器是如何工作的,并成功地对其进行了编码。现在,我正在尝试实现可解决XOR门问题的多层感知器,并且对如何训练它感到困惑。

从理论上讲,我知道如何用3个感知器解决XOR-具有2个感知器的隐藏层(一个是OR门,另一个是NAND门)和具有单个感知器的输出层(AND门)。所有这些听起来像是我必须分别训练每个感知器才能使其成为特定类型的门。但是,如果我有更多的神经元,而又有更多的隐藏层怎么办?弄清楚每个神经元应该是什么,然后分别训练它们,这很可能不是这样做的方法。

因此,我建立了网络-输入进入2个隐藏层感知器,它们的输出进入输出层的感知器,后者又返回最终结果。然后,我尝试用训练单个感知器的方式训练网络-通过计算整个网络的误差(预期-预测),然后使用相同的误差值分别更新每个神经元的权重和偏差。以下是PHP培训代码的主要部分。

....

$error = $expected - $predicted;

foreach ($this->hiddenLayer as $neuron) {
    // Adjusting the weights
    for ($i = 0; $i < 2; $i++) {
        $neuron->weights[$i] += ($learningRate * $inputs[$i] * $error);
    }

    // Adjusting the bias
    $neuron->bias += ($learningRate * $error);
}

foreach ($this->outputLayer as $neuron) {
    // Adjusting the weights
    for ($i = 0; $i < 2; $i++) {
        $neuron->weights[$i] += ($learningRate * $inputs[$i] * $error);
    }

    // Adjusting the bias
    $neuron->bias += ($learningRate * $error);
}

我在训练后从网络上获得的结果不正确,而且似乎是随机的。

0 个答案:

没有答案