Swift XOR神经网络-意外结果
我试图在swift中实现Daniel Shiffman的XOR神经网络,我拥有所有部分,但经过训练,结果出乎意料 我的一部分认为这是一个实际的训练系统,试图同时学习多种东西 我已将我的游乐场连接起来,以防任何人发现任何错误: 丹尼尔斯代码:Swift XOR神经网络-意外结果,swift,neural-network,Swift,Neural Network,我试图在swift中实现Daniel Shiffman的XOR神经网络,我拥有所有部分,但经过训练,结果出乎意料 我的一部分认为这是一个实际的训练系统,试图同时学习多种东西 我已将我的游乐场连接起来,以防任何人发现任何错误: 丹尼尔斯代码: 您的代码中有几个错误。第一个(也是最重要的)是你创建人际网络的方式的微妙之处 现在你正在使用 inputs = [Neuron](repeating: Neuron(), count:2+1) hidden = [Neuron](repeating: Ne
您的代码中有几个错误。第一个(也是最重要的)是你创建人际网络的方式的微妙之处 现在你正在使用
inputs = [Neuron](repeating: Neuron(), count:2+1)
hidden = [Neuron](repeating: Neuron(), count:4+1)
但这会创建具有相同神经元的所有输入,以及具有相同神经元的所有隐藏的,因此只有4个神经元
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()
}
...
}
另一件(次要的)事情是,当你计算一个神经元的输出时,你是在添加偏差而不是替换它,我不知道这是否是故意的,但结果似乎没有受到影响
创建网络时使用了多少隐藏层节点?我发现,当您至少有3个节点时,带有1个隐藏层的XOR工作得更好。我有1个隐藏层,带有4个节点初始化连接时,您在[0,1]
范围内给权重属性一个随机值,但权重应该在[-1,1]
范围内随机化。尝试将Connection
初始化中的行self.weight=we
更改为self.weight=2*we-1
。啊!我不知道“重复:”使用相同的第一个论点:-/非常感谢你澄清和解决了我的问题。当stackoverflow允许我时,我将奖励分数。