在阅读了一些关于神经网络(反向传播)的文章后,我尝试自己编写一个简单的神经网络。
我决定了 XOR 神经网络,我的问题是当我试图训练网络时,如果我只使用一个例子来训练网络,让我们说 1,1,0(作为输入 1,输入 2,目标输出)。经过 500 次火车 +- 网络回答 0.05。但是,如果我尝试不止一个示例(让我们说 2 种不同或所有 4 种可能性),网络的目标是 0.5 作为输出 :( 我在谷歌搜索我的错误但没有结果:我会尽量提供尽可能多的细节帮助找出问题所在:
-ive 尝试了具有 2,2,1 和 2,4,1 的网络(输入层、隐藏层、输出层)。
- 每个神经元的输出定义为:
double input = 0.0;
for (int n = 0; n < layers[i].Count; n++)
input += layers[i][n].Output * weights[n];
而“i”是当前层,权重是前一层的所有权重。
- 最后一层(输出层)错误定义为:
value*(1-value)*(targetvalue-value);
而“value”是神经输出,“targetvalue”是当前神经的目标输出。
- 其他神经元的误差定义为:
foreach neural in the nextlayer
sum+=neural.value*currentneural.weights[neural];
- 网络中的所有权重都由这个公式调整(来自神经网络的权重 -> 神经网络 2)
weight+=LearnRate*neural.myvalue*neural2.error;
而 LearnRate 是网络学习率(在我的网络中定义为 0.25)。- 每个神经元的偏差权重定义为:
bias+=LearnRate*neural.myerror*neural.Bias;
偏差是常量值 = 1。
这几乎是我能详细说明的,正如我所说的输出目标是 0.5,不同的训练示例:(
非常感谢您的帮助^_^。