2017-08-10 490 views
0

我想弄清楚这整个机器学习的东西,所以我正在做一些测试。我想让它学习窦功能(用弧度角度)。该神经网络是:使用ReLu机器学习返回NaN

1输入(弧度角)/ 2个隐藏层/ 1输出(窦的预测)

对于壁球激活我使用:RELU并注意到这一点很重要当我使用Logistic函数而不是RELU时,脚本正在工作。所以要做到这一点,我已经做了一个循环,开始于0,并在180结束,它将翻译弧度(弧度= loop_index * Math.PI/180)的数字,然后它将基本上做这个弧度角的正弦,并存储弧度和正弦结果。

所以,我的表是这样的一个条目:{输入:[RADIAN ANGLE],输出:[罪(弧度)]}

for(var i = 0; i <= 180; i++) { 
    radian = (i*(Math.PI/180)); 
    train_table.push({input:[radian],output:[Math.sin(radian)]}) 
} 

我用这个表来训练使用过我的神经网络Entropy,学习率为0.3,迭代次数为20000次。

的问题是,它失败了,当我试图预测任何事情,它返回“南”

我使用的框架突触(https://github.com/cazala/synaptic)这里是我的代码的jsfiddle:https://jsfiddle.net/my7xe9ks/2/

+0

你需要分享完整的代码,而不仅仅是这部分,这似乎毫不相关恕我直言。 –

+0

添加语言标签可能会有所帮助。那是JavaScript?你在使用哪个库?你如何计算交叉熵? –

+0

我使用JavaScript使用此框架:https://github.com/cazala/synaptic,这里是我的代码jsfiddle:https://jsfiddle.net/my7xe9ks/2/ – Raphael

回答

0

一学习率必须仔细调整,这个参数很重要,特别是当梯度爆炸,你​​得到一个南。发生这种情况时,您必须降低学习率,通常为10倍。

在您的具体情况下,如果您使用0.05或0.01的网络,学习率过高,现在可以训练并正常工作。

另一个重要的细节是,您使用交叉熵作为损失,此损失用于分类,并且您有回归问题。您应该更喜欢均值平方误差损失。

+0

感谢您的回答,有没有什么方法可以确定学习速度,还是我必须手动调整它,并等待获得完美的结果? – Raphael

+0

@Raphael它必须手动调整,但有像Adagrad,ADAM和RMSProp这样的优化器可以在训练过程中自动缩放学习率。 –

+0

当您使用MSE(均方根误差)时,您建议结果在某个时间完全错误。我使用0.005的学习率(并尝试了其他学习速度,但它也是这样做的),这里是jsfiddle:https://jsfiddle.net/my7xe9ks/4/你有什么可能导致这种情况的想法吗? – Raphael