为了尽可能简洁,我用Java实现了一个神经网络,它最初只是作为XOR的一个示例编写。
这很好用,所以我转到了加载NN的输入/输出的概念证明。我已经更改了算法,以接受二进制,并读取它应该看到的数字。使用2位或3位作为输入,我可以用预期的输出获得很好的结果。
-- --> 0.000
-O --> 1.000
O- --> 2.000
OO --> 3.000 和
--- --> 0.000
--O --> 1.000
-O- --> 2.000
-OO --> 3.000
O-- --> 4.000
O-O --> 5.000
OO- --> 6.000
OOO --> 7.000现在,一旦我将bits输入/输出预期数量增加到4,我就开始遇到问题。
---- --> 0.985
---O --> 0.985
--O- --> 3.160
--OO --> 3.160
-O-- --> 4.990
-O-O --> 4.990
-OO- --> 6.747
-OOO --> 6.747
O--- --> 8.094
O--O --> 8.094
O-O- --> 9.696
O-OO --> 9.696
OO-- --> 12.531
OO-O --> 12.531
OOO- --> 14.395
OOOO --> 14.395 发生这种情况的概念性原因是什么?我尝试了所有类型的隐藏层大小和层数,结果没有差别。
我将输出一个更大的结果。
----- --> 2.515
----O --> 2.515
---O- --> 2.515
---OO --> 2.515
--O-- --> 6.598
--O-O --> 6.598
--OO- --> 6.598
--OOO --> 6.598
-O--- --> 10.241
-O--O --> 10.241
-O-O- --> 10.241
-O-OO --> 10.241
-OO-- --> 14.364
-OO-O --> 14.364
-OOO- --> 14.364
-OOOO --> 14.364
O---- --> 18.190
O---O --> 18.190
O--O- --> 18.190
O--OO --> 18.190
O-O-- --> 22.319
O-O-O --> 22.319
O-OO- --> 22.319
O-OOO --> 22.319
OO--- --> 26.824
OO--O --> 26.824
OO-O- --> 26.824
OO-OO --> 26.824
OOO-- --> 30.966
OOO-O --> 30.966
OOOO- --> 30.966
OOOOO --> 30.966正如你所看到的,可以计算出明显的“聚束”。
谢谢你的帮助!
发布于 2014-05-31 09:48:55
好吧,答案归结于我的响应中的位数。长话短说,如果您使用1个输出神经元作为整数预期输出,则数据类型的位数就是输出范围……
修复方法是输出神经元返回类型的位数(浮点数32,双精度64)是不应超过的范围。
为了训练集的预期结果,我刚刚运行了numberYouWant/maxNumberTheResultYouWantTheNetworkToBe * outputsDataSize的转换
基本上,让它很好地数到32或64,并使任何数字系统都适合它。
感谢您的帮助:)
https://stackoverflow.com/questions/23944810
复制相似问题