【发布时间】:2012-11-07 08:34:23
【问题描述】:
我已经建立了自己的神经网络,但我遇到了一个奇怪的问题。
该网络是一个非常简单的前馈 1-N-1 网络,具有反向传播学习。使用 Sigmoid 作为激活函数。
我的训练集是用 [-PI, PI] 和它们的 [0,1] 缩放正弦值之间的随机值生成的(这是因为“Sigmoid-net”只产生 [0,1] 和未缩放的值之间的值正弦函数产生的值介于 [-1,1])。
使用该训练集,网络设置为 1-10-1,学习率为 0.5,一切正常,网络学习了 sin 函数。但是..如果我对 COSINE 函数以同样的方式做所有事情,网络就不会学习它。没有任何隐藏层大小或学习率的设置。
有什么想法吗?我错过了什么吗?
编辑:我的问题似乎与this 小程序所见类似。除非首先为权重教授“更简单”的东西(例如 1400 个二次函数循环),否则它似乎不会学习正弦函数。小程序中的所有其他设置都可以保持初始状态。因此,在正弦或余弦的情况下,在找到解决方案之前,权重似乎需要一些提升以至少部分正确的方向。这是为什么呢?
【问题讨论】:
-
它学到了什么?这可能有助于我们猜测问题出在哪里。
-
我注意到 sin(x+0.5*PI) (等于 cos x)也不起作用。幂函数(^2、^3 等)似乎也不起作用。线性函数确实有效。代码中可能存在一些问题,而 sin[-PI, PI] -function 的成功只是一个奇怪的副作用。
-
发布一些代码可能会对我们有所帮助。
标签: c++ neural-network trigonometry backpropagation feed-forward