Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network 神经网络教学:双极异或_Neural Network_Xor - Fatal编程技术网

Neural network 神经网络教学:双极异或

Neural network 神经网络教学:双极异或,neural-network,xor,Neural Network,Xor,我试图教一个由2个输入、4个隐藏节点(都在同一层)和1个输出节点组成的神经网络。二进制表示很好,但我对双极表示有问题。我不知道为什么,但总误差有时会收敛到2.xx左右的相同数字。我的乙状结肠是2/(1+exp(-x))-1。也许我用乙状结肠在错误的地方。例如,要计算输出误差,我应该将sigmoided输出与预期值进行比较,还是与sigmoided预期值进行比较 我在这里关注这个网站:,但他们使用不同的功能,然后我被指示使用。即使当我尝试实现它们的功能时,我仍然遇到同样的问题。无论哪种方式,我都有

我试图教一个由2个输入、4个隐藏节点(都在同一层)和1个输出节点组成的神经网络。二进制表示很好,但我对双极表示有问题。我不知道为什么,但总误差有时会收敛到2.xx左右的相同数字。我的乙状结肠是2/(1+exp(-x))-1。也许我用乙状结肠在错误的地方。例如,要计算输出误差,我应该将sigmoided输出与预期值进行比较,还是与sigmoided预期值进行比较

我在这里关注这个网站:,但他们使用不同的功能,然后我被指示使用。即使当我尝试实现它们的功能时,我仍然遇到同样的问题。无论哪种方式,我都有一半的时间被困在同一个数字上(不同的实现有不同的数字)。请告诉我我的代码中是否有错误,或者这是否正常(我不知道这是怎么回事)。动量设置为0。这是一个常见的0动量问题吗?我们应该使用的错误函数是:

如果ui是一个输出单元

错误(i)=(Ci-ui)*f'(Si)

如果ui是一个隐藏单元

Error(i)=Error(Output)*weight(i到Output)*f'(Si)

公共双S形(双x){
双fBipolar、fBinary、temp;
温度=(1+数学表达式(-x));
fBipolar=(2/温度)-1;
fBinary=1/温度;
中频(双极){
返回fBipolar;
}否则{
返回FBI;
}
}
//将权重初始化为随机值。
私有无效初始化权(双负,双位){
对于(int i=0;ipos){
打印(“错误”);
打印(输入权重[i][j]);
}
}
}
对于(int i=0;ipos){
打印(“错误”);
打印(隐藏权重[i]);
}
}
}
//在不进行训练的情况下计算NN的输出。即向前传球
公共双输出(双向量){
for(int i=0;i
一般编码注释:

initializeWeights(-1.0, 1.0);
可能无法实际获得您期望的初始值

初始化灯光可能具有:

inputWeights[i][j] = Math.random() * (pos - neg) + neg;
// ...
hiddenWeights[i] = (Math.random() * (pos - neg)) + neg; 
而不是:

Math.random() - pos;
因此,这是可行的:

initializeWeights(0.0, 1.0);
并为您提供介于0.0和1.0之间的初始值,而不是介于-1.0和0.0之间的初始值

lastDelta
在声明之前使用:

deltaHiddenWeights[i] = learningRate * outputError * hiddenActivation[i] + (momentum * lastDelta);
我不确定是否需要
numinput+1
numHiddenNeurons+1
上的
+1

记住要注意整数的四舍五入:5/2=2,而不是2.5! 改用5.0/2.0。通常,当输出应为双精度时,在代码中添加.0

最重要的是,你训练神经网络的时间够长吗

试着用numInputs=2、numHiddenNeurons=4、learningRate=0.9和训练1000或10000次来运行它。

使用numHiddenNeurons=2时,它在试图解决XOR问题时有时会“卡住”

另见

deltaHiddenWeights[i] = learningRate * outputError * hiddenActivation[i] + (momentum * lastDelta);