我已经完成了所有代码,如果确实是问题,那么我不确定它是如何避开我的。发帖太长了,所以我会告诉你我的问题,看看我的修复方法,如果你有任何想法我还能找到什么我会非常感激!
好的,首先根据haykin的指示,权重初始化为均值为零,方差等于该神经元输入数的1 /平方根。
我先给它一个简单的正弦波来学习。隐藏层中的权重似乎收敛,为该层中的每个神经元提供相同的输出......这使得输出神经元提供了几乎固定的输出。
那么,原因可能是什么?首先,我检查了网络学习率是否导致它陷入局部最小值并增加它,并且还尝试了&没有动力。我发现它在某种程度上纠正了这个问题,因为网络会产生正弦波。但是,不正确! :(
网络输出的幅度大约是距中心轴向上的高度的三分之一,并且不会低于此值。它看起来有点像你已经选择了正弦波,将它压扁了三分之一然后将它抬起来坐在轴上的最低峰。此外,顶峰都是平坦的......
我尝试改变网络拓扑,如果我添加另一个隐藏的神经元(总共3个),它突然只给出一个固定的输出。
答案 0 :(得分:0)
对于具有S形激活功能的神经网络,正弦波不是一个容易的问题。 3个隐藏的神经元通常是不够的。看一下this示例:有200个隐藏节点来近似[0,2 * pi]内的正弦波。此示例中的激活函数是:隐藏层中的逻辑sigmoid和输出层中的标识。您总是应该在输出层中使用identity进行回归。
当你没有得到好结果时,它也可能有助于降低学习率。有时梯度下降在误差函数的陡峭区域之间振荡,因为学习速率太大。