0

我有一些问题,反向传播学习使用AForge.NET - 神经学习 - 反向传播。我实际上尝试像样本一样实现神经网络(Aproximation)。我的问题是这样的: 1. input vector {1,2,3,...,19,20} 2.输出矢量{1,2,3,...,19,20}(它是线性函数) 3. ActivationNetwork network = new ActivationNetwork(new BipolarSigmoidFunction(2),1,20,1); 4.然后约10k倍 - teacher.RunEpoch(输入,输出);AForge.NET - 向后传播学习总是返回值[-1; 1]

学习完成后,我的network.Compute()返回[-1; 1]中的值为什么?

在示例中有像向量(x - > [ - 1; 1]和y - > [-0.85; 0.85])的值归一化的东西,当我这样做时,一切都很好......但它只是样本我想了解神经网络如何工作。我目前要实现的问题比较复杂(超过40个输入神经元)

任何人都可以帮助我吗?

回答

2

我还没有和AForge一起工作,但BipolarSigmoidFunction最有可能是tanh,即输出在[-1,1]之内。这通常用于分类或有时用于有界回归。在您的情况下,您可以缩放数据或使用线性激活功能(例如标识,g(a) = a)。

+0

谢谢,我看到我必须调整我的输入和输出或使用线性函数,但是足够扩展到更复杂的问题,我有超过40个输入神经元? – DMan 2013-05-12 13:40:17

+1

输入数量无关紧要。唯一可能发生的情况是:当您的输入变得非常大(这更可能是输入数量较高时),S形激活函数(例如逻辑函数tanh)“饱和”,即梯度几乎变为0.因此,学习将会非常缓慢甚至不可能。这就是为什么通常建议将输入缩放为[-1,1]并用非常小的随机数初始化神经网络的权重的原因。 – alfa 2013-05-12 17:33:05