Machine learning 基于ReLu的机器学习

Machine learning 基于ReLu的机器学习,machine-learning,neural-network,Machine Learning,Neural Network,我试图弄清楚整个机器学习的事情,所以我做了一些测试。我想让它学习窦性功能(弧度角)。神经网络是: 1个输入(弧度角)/2个隐藏层/1个输出(窦预测) 对于壁球激活,我使用:RELU,需要注意的是,当我使用Logistic函数而不是RELU时,脚本工作正常 为此,我做了一个从0开始到180结束的循环,它将以弧度(radian=loop_index*Math.PI/180)转换数字,然后基本上做这个弧度角的正弦,并存储弧度和正弦结果 所以我的表对于一个条目是这样的:{input:[RADIAN AN

我试图弄清楚整个机器学习的事情,所以我做了一些测试。我想让它学习窦性功能(弧度角)。神经网络是:

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

对于壁球激活,我使用:RELU,需要注意的是,当我使用Logistic函数而不是RELU时,脚本工作正常

为此,我做了一个从0开始到180结束的循环,它将以弧度(radian=loop_index*Math.PI/180)转换数字,然后基本上做这个弧度角的正弦,并存储弧度和正弦结果

所以我的表对于一个条目是这样的:{input:[RADIAN ANGLE],output:[sin(RADIAN)]}


对于(var i=0;i学习率必须仔细调整,这个参数非常重要,特别是当梯度爆炸时,你会得到一个nan。当这种情况发生时,你必须降低学习率,通常是10倍

在您的特定情况下,学习率太高,如果使用0.05或0.01,网络现在可以正常训练和工作


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

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

在您的特定情况下,学习率太高,如果使用0.05或0.01,网络现在可以正常训练和工作


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

您需要共享完整的代码,而不仅仅是与IMHO无关的这部分。添加语言标记可能会有所帮助。是这样吗javascript?你在使用哪个库?你是如何计算交叉熵的?我在使用javascript使用这个框架:下面是我的一段代码:当我将学习率更改为0.03时,它似乎做了一些事情,但结果并不准确。你需要共享完整的代码,而不仅仅是这一部分,这一部分看起来很重要相关的IMHO。添加语言标签可能会有帮助。是javascript吗?你在使用哪个库?你是如何计算交叉熵的?我正在使用javascript使用这个框架:下面是我的一段代码:当我将学习率更改为0.03时,它似乎做了些什么,但结果并不精确谢谢你的answer、 有没有办法确定学习率,或者我必须手动调整学习率,然后等待获得完美的学习率?@Raphael必须手动调整学习率,但有Adagrad、ADAM和RMSProp等优化器,它们可以在训练期间自动调整学习率。当使用MSE(均方误差)时正如你所说的,结果在某个时候会完全错误。我使用了0.005的学习率(并尝试了其他学习率,但它也这么做了),下面是jsfiddle:你知道是什么导致了这一结果吗?@Raphael我不会说“完全错误”,这个网络非常简单,你必须实验其他可能更适合这个数据的网络结构。训练神经网络不仅仅是输入和输出数据。谢谢你的回答,有没有办法确定学习速度,或者我必须手动调整它,等待得到完美的一个?@Raphael需要手动调整,但有Adagrad、ADAM和RMSProp等优化器可以在培训期间自动调整学习率。当使用MSE(均方误差)时,结果在某个时间完全错误。我使用了0.005的学习率(并尝试了其他学习率,但效果相同)这里是JSFIDLE:你知道是什么原因造成的吗?@Raphael我不会说“完全错误”,这个网络非常简单,你必须实验其他可能更适合这个数据的网络结构。训练神经网络远不止是输入和输出数据。
for(var i = 0; i <= 180; i++) {
    radian = (i*(Math.PI / 180));
    train_table.push({input:[radian],output:[Math.sin(radian)]})
}