XOR神经网络 - 意外结果

时间:2016-11-01 10:56:41

标签: swift neural-network

我正试图快速实施Daniel Shiffman的XOR神经网络,我拥有所有部分,但经过训练后,结果出乎意料。

我的一部分认为这是试图同时学习多项内容的实际培训系统。

Results Screenshot

如果有人发现任何错误,我已将我的游乐场联系起来:https://www.dropbox.com/s/9rv8ku3d62h03ip/Neural.playground.zip?dl=0

Daniels代码:

https://github.com/shiffman/The-Nature-of-Code-Examples/blob/master/chp10_nn/xor/code/src/Network.java

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误。第一个(也是最重要的)是你创建网络的方式的微妙之处。

现在你正在使用

inputs = [Neuron](repeating: Neuron(), count:2+1)
hidden = [Neuron](repeating: Neuron(), count:4+1)

但是这会创建具有相同Neuron的所有输入以及具有相同hidden的所有Neuron,因此输入只有4 Neuron s:2 (常规重复2次,偏置神经元)和2次隐藏(常规重复4次,1次偏置)。

您可以通过简单地使用for循环来解决它:

public class Network
{
    var inputs:[Neuron] = []
    var hidden:[Neuron] = []
    var output:Neuron!

    public init()
    {
        for _ in 1...2 {
            inputs.append(Neuron())
        }

        for _ in 1...4 {
            hidden.append(Neuron())
        }

        //print("inputs length: \(inputs.count)")

        inputs.append(Neuron(bias: true))
        hidden.append(Neuron(bias: true))

        output = Neuron()

        setupInputHidden()
        setupHiddenOutput()
    }

    ...
}

另一个(次要)的事情是,当你计算Neuron的输出时,你正在添加偏见而不是替换它(bias = from.output*c.weight),我不知道这是否是故意的,但是结果似乎没有受到影响。

Trained network