用正弦函数训练神经网络

时间:2016-06-10 20:47:21

标签: ruby neural-network artificial-intelligence

我想用sine()函数训练神经网络。

目前我使用此代码和(cerebrum gem):

{{1}}

但它不起作用,如果我运行经过训练的网络,我会得到一些奇怪的输出值(而不是获得正弦曲线的一部分)。

那么,我做错了什么?

1 个答案:

答案 0 :(得分:4)

Cerebrum是一个非常基本且缓慢的NN实现。 Ruby中有更好的选项,例如ruby-fann gem。

最有可能的问题是网络过于简单。您尚未指定任何隐藏图层 - 看起来代码会为您的案例分配一个默认隐藏图层,其中包含3个神经元。

尝试类似:

network = Cerebrum.new({
  learning_rate:  0.01,
  momentum:       0.9,
  hidden_layers:  [100]
})

并期望它需要永远训练,加上仍然不是很好。

此外,您选择的300个输出太宽泛 - 对于网络而言,它看起来大多像噪声,并且它不会在点之间插补良好。一个神经网络并没有以某种方式弄清楚"哦,那必须是一个正弦波"并匹配它。相反,它在点之间进行插值 - 当它在多个维度上同时发生时,巧妙的位发生,也许找到你用手动检查不能轻易发现的结构。为了给它一个合理的学习机会,我建议你给它更多密集点,例如:您目前在sinus = Math::sin(i)使用的地方:

sinus = Math::sin(i.to_f/10)

通过正弦波,这仍然是近5次迭代。希望这足以证明网络可以学习任意函数。