我正在我的项目中使用一个外部库来实现人工神经网络。
在测试ANN时,它给我的输出全是NaN
(C#中表示“非数字”)。
-
该ANN有8个输入,5个隐藏层节点,5个隐藏层节点,2个输出,并且所有的激活层都是线性类型,它使用反向传播算法,学习率是0.65。
-
我使用一个测试用例来训练
{ -2.2, 1.3, 0.4, 0.5, 0.1, 5, 3, -5 } ,{ -0.3, 0.2 }
1000个epoch。 -
然后我用
{ 0.2, -0.2, 5.3, 0.4, 0.5, 0, 35, 0.0 }
测试它,结果得到{ NaN , NaN}
。
注意: 这只是产生相同情况的众多例子之一…
我正在尝试找出这到底是库中的bug,还是一个不合逻辑的配置。
我能想到的不合逻辑的配置原因有:
- 所有层都不应该是线性的。
- 不能有递减大小的层,例如
8-5-5-2
是不好的。 - 只有一个测试用例?
- 数值必须在[0,1]或[-1,1]范围内。
以上任何一个原因都可能是导致错误的原因吗?或者在ANN设计中,我不知道还有一些约束/规则?
注意:我是ANN新手。
回答:
嗯,在不了解你使用的库的情况下,很难猜测。通常,ANN的输入需要介于0..1或-1..1之间,所以也许是因为你有超出该范围的值,导致了不幸的结果。
如果上述原因是问题的根源,那么有很多技术可以将数据编码传递给ANN,例如,你可以缩放你的输入,以确保它们始终在范围内,并保持相对关系。