2013-04-28 106 views
1

我已经通过了我的所有代码,如果它真的是问题,那么我不知道它是如何避开我。发帖太久了,所以我会告诉你我的问题,我想要解决的问题,如果你有任何想法,我还可以寻找什么,我会非常感激!好吧,所以首先按照haykin的指示,用平均零和方差等于该神经元输入数量的1 /平方根初始化权重。MLP神经网络不会学习

我已经喂它一个简单的正弦波首先学习。隐藏层中的权重似乎会收敛,从而为该层内的每个神经元提供相同的输出......这使得输出神经元给出几乎固定的输出。

那么,可能是什么原因?首先,我检查了网络学习率是否导致它陷入局部最小值并增加了它,并且还尝试着没有动力的&。我发现它在一定程度上纠正了这个问题,因为网络产生了正弦波。但是,不正确! :(

网络输出的振幅大约是离中心轴高度的三分之一,并且不会下移,看起来有点像你选择了正弦波,挤压了三分之一,并将其​​提升到坐在它的轴上的最低峰,此外,顶峰都是平坦的...此外,顶点都是平坦的...

我试着改变网络拓扑结构,因此如果我添加另一个隐藏的神经元(总共3个)它突然只给出一个固定的输出。

+0

虽然你的代码可能太长,没有代码,但很难知道你的问题是什么。也许你可以发布你的输出图片和你认为会导致问题的部分代码。您的激活功能是否与有限的域名一起使用?例如,Sigmoid输出被限制为[0,1]。这听起来像你可能需要改变你的功能或扩大你的数据,然后再送入网络(并重新调整输出)。 – 2013-04-28 23:58:32

回答

0

正弦波对于具有S形激活函数的神经网络来说不是一个简单的问题,3个隐藏的神经元通常是不够的,看看this举例:有200个隐藏节点在[0,2 *π]范围内产生正弦波。本例中的激活函数是:隐藏层中的logistic sigmoid和输出层中的标识。你总是应该在输出层使用身份来进行回归。

当你没有得到好的结果时,也可能会降低学习率。有时,梯度下降在误差函数的陡峭区域之间振荡,因为学习速率太大。