Machine learning 回声状态神经网络?

Machine learning 回声状态神经网络?,machine-learning,neural-network,classification,Machine Learning,Neural Network,Classification,这里有熟悉echo state networks的人吗?我用c#创建了一个回声状态网络。目的只是将投入分为好投入和不好投入。输入是一个双数数组。我知道对于这种分类,回声状态网络可能不是最好的选择,但我必须用这种方法 我的问题是,经过网络训练后,它无法推广。当我用外来数据(不是教学输入)运行网络时,我只得到大约50-60%的好结果 更多细节:我的回声状态网络必须像函数逼近器一样工作。函数的输入是一个由17个双值组成的数组,输出是0或1(我必须将输入分为坏输入或好输入) 所以我创建了一个网络。它包含

这里有熟悉echo state networks的人吗?我用c#创建了一个回声状态网络。目的只是将投入分为好投入和不好投入。输入是一个双数数组。我知道对于这种分类,回声状态网络可能不是最好的选择,但我必须用这种方法

我的问题是,经过网络训练后,它无法推广。当我用外来数据(不是教学输入)运行网络时,我只得到大约50-60%的好结果

更多细节:我的回声状态网络必须像函数逼近器一样工作。函数的输入是一个由17个双值组成的数组,输出是0或1(我必须将输入分为坏输入或好输入)

所以我创建了一个网络。它包含一个具有17个神经元的输入层,一个可调节neron数的存储层,以及一个具有1个神经元的输出层,用于0或1所需的输出。在一个简单的例子中,没有使用输出反馈(我也尝试使用输出反馈,但没有任何改变)

储层的内基质也是可调的。我使用可调稀疏率在两个双值(最小值、最大值)之间生成权重。如果值太大,则会使矩阵的光谱半径小于1。储层可具有S形和tanh激活功能

输入层以随机值完全连接到储层。因此,在训练状态下,我使用训练数据计算内部X(n)储备激活,并将它们收集到矩阵rowvise中。使用所需的输出数据矩阵(现在是一个具有1 ot 0值的向量),我计算输出重量(从储液罐到输出)。储液罐完全连接到输出端。如果有人使用回声状态网络,这就是我所说的。我用伪逆方法来解决这个问题

问题是,我如何调整网络,使其更好地推广?使用外部数据集(非培训数据集)达到50-60%以上的期望输出。如果我用训练数据集再次运行网络,它会给出非常好的结果,80-90%,但我想做的是更好地推广


我希望echo state networks也有这个问题。

如果我理解正确,您有一组已知的、经过培训的机密数据,然后您有一些未知的数据,您随后会进行分类。您会发现,经过培训后,您可以很好地对已知数据进行重新分类,但无法对未知数据进行良好分类。我认为,这就是所谓的——您可能想考虑对网络不那么严格,减少节点数量,和/或基于隐藏数据集进行培训

人们这样做的方式是,他们有一个训练集a、一个验证集B和一个测试集C。您知道a和B的正确分类,但不知道C(因为您将已知数据拆分为a和B,C是您希望网络为您找到的值)。在培训时,您只显示网络A,但在每次迭代中,为了计算成功率,您同时使用A和B。因此,在培训时,网络试图通过仅查看A来了解A和B中存在的关系。因为它无法看到B中的实际输入和输出值,但只知道其当前状态是否准确描述了B,这有助于减少过度拟合

通常人们似乎将4/5的数据分成A,1/5的数据分成B,但当然你可以尝试不同的比率

最后,你完成了训练,看看网络会对你的未知集合C说些什么


很抱歉给出了非常笼统和基本的答案,但也许这有助于更好地描述这个问题。

如果我理解正确,您有一组已知的、分类的数据,然后您有一些未知的数据,随后您将对其进行分类。您会发现,经过培训后,您可以很好地对已知数据进行重新分类,但无法对未知数据进行良好分类。我认为,这就是所谓的——您可能想考虑对网络不那么严格,减少节点数量,和/或基于隐藏数据集进行培训

人们这样做的方式是,他们有一个训练集a、一个验证集B和一个测试集C。您知道a和B的正确分类,但不知道C(因为您将已知数据拆分为a和B,C是您希望网络为您找到的值)。在培训时,您只显示网络A,但在每次迭代中,为了计算成功率,您同时使用A和B。因此,在培训时,网络试图通过仅查看A来了解A和B中存在的关系。因为它无法看到B中的实际输入和输出值,但只知道其当前状态是否准确描述了B,这有助于减少过度拟合

通常人们似乎将4/5的数据分成A,1/5的数据分成B,但当然你可以尝试不同的比率

最后,你完成了训练,看看网络会对你的未知集合C说些什么


很抱歉给出了非常笼统和基本的答案,但也许这将有助于更好地描述问题。

如果您的网络没有概括,这意味着它太过合适了

要减少神经网络上的过度拟合,有两种方法:

  • 获取更多培训数据
  • 减少神经元的数量
您还可以考虑为网络提供的功能。例如,如果它是一个每周重复的时间序列,那么其中一个功能类似于“一周中的一天”或“一周中的一小时”或“一周中的一分钟”


神经网络需要大量的数据。很多很多例子。几千。如果你没有数千个神经元,你应该选择一个只有少数神经元的网络,或者使用其他一些参数较少的网络,如回归,因此不太容易过度拟合。

如果你的网络没有泛化,那就意味着它过度拟合

要减少神经网络上的过度拟合,有两种方法:

    <