Python 当神经网络在PyBrain回归中给出相同的输出时,使用什么激活函数或进行什么修改?

Python 当神经网络在PyBrain回归中给出相同的输出时,使用什么激活函数或进行什么修改?,python,machine-learning,neural-network,pybrain,Python,Machine Learning,Neural Network,Pybrain,我有一个神经网络,有一个输入,三个隐藏的神经元和一个输出。我有720个输入和相应的目标值,540个用于训练,180个用于测试。 当我使用Logistic Sigmoid或Tan Sigmoid函数训练我的网络时,我在测试时得到相同的输出,也就是说,我对所有180个输出值得到相同的数字。当我使用线性激活函数时,我得到NaN,因为很明显,这个值太高了 在这种情况下,是否有任何激活功能可供使用?还有什么需要改进的地方吗?如果需要,我可以用详细信息和代码更新问题。当输入任意比例的数据时,神经网络是不稳定

我有一个神经网络,有一个输入,三个隐藏的神经元和一个输出。我有720个输入和相应的目标值,540个用于训练,180个用于测试。 当我使用Logistic Sigmoid或Tan Sigmoid函数训练我的网络时,我在测试时得到相同的输出,也就是说,我对所有180个输出值得到相同的数字。当我使用线性激活函数时,我得到NaN,因为很明显,这个值太高了


在这种情况下,是否有任何激活功能可供使用?还有什么需要改进的地方吗?如果需要,我可以用详细信息和代码更新问题。

当输入任意比例的数据时,神经网络是不稳定的(例如,在您的案例中,输入数据大约在0到1000之间)。如果您的输出单位为tanh,他们甚至无法预测超出范围的值-1到1或0到1的物流单位

您应该尝试重新居中/缩放数据(使其具有零均值和单位方差-这在数据科学社区中称为标准缩放)。由于这是一种无损转换,一旦你训练了网络并对数据进行了预测,你就可以恢复到原来的比例


此外,线性输出单元可能是最好的,因为它对输出空间没有任何假设,我发现在低维输入/隐藏/输出网络中,tanh单元在递归神经网络上表现得更好。

Newmu是正确的,缩放可能是这里的问题;您需要缩放输入,使其位于有效范围内。(正如他们所说,将标准化为零均值、单位方差并不是一个很好的选择,因为这意味着大约三分之一的数据会喜欢外部[-1,1]..)我不知道pybrain,但在scikit中,了解你想要的

但是,您在评论中还说,您的数据集如下所示:

水平轴为输入,垂直轴为目标。所以,当你看到一个200的输入时,你有一个训练例子说它是80,一个说它是320;那你想让它说什么?“最优”神经网络(可能很难实现)可以预测200个左右


您可能需要考虑如何将您的学习问题重新定义为从输入到目标的更一致的函数。

您能发布一个输入/输出对的图吗?@Dougal:您的意思是,输入与目标图?或输入和目标的单独绘图?输入与目标。每个都是1d,对吗?@Dougal:是的。我会发布情节。@Dougal:因为我需要10个声望点才能发布一张照片,所以我不能在这里发布。这里有一个到绘图的链接(x轴是输入,y轴是目标):谢谢你的回答,@Newmu。您能详细说明我如何使用Python或Pybrain执行缩放/重新居中吗?一旦我得到输出,如何将它们转换为以前的缩放?谢谢您的回答,@Dougal。实际上,x轴是目标,y轴是输入。我键入时出错,现在无法编辑评论。你能建议我应该做些什么来接近输出值吗?我对安比较陌生,所以对这个话题不太了解。