我正试图快速实施Daniel Shiffman的XOR神经网络,我拥有所有部分,但经过训练后,结果出乎意料。
我的一部分认为这是试图同时学习多项内容的实际培训系统。
如果有人发现任何错误,我已将我的游乐场联系起来:https://www.dropbox.com/s/9rv8ku3d62h03ip/Neural.playground.zip?dl=0
Daniels代码:
答案 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
),我不知道这是否是故意的,但是结果似乎没有受到影响。