这里有熟悉回声状态网络的人吗?我在 C# 中创建了一个回声状态网络。目的只是将输入分为好和不好的输入。输入是一个双精度数数组。我知道对于这个分类,回声状态网络可能不是最好的选择,但我必须用这种方法来做。
我的问题是,在训练网络之后,它无法泛化。当我用外国数据(不是教学输入)运行网络时,我只能得到大约 50-60% 的好结果。
更多细节:我的回声状态网络必须像函数逼近器一样工作。该函数的输入是一个包含 17 个双精度值的数组,输出是 0 或 1(我必须将输入分类为坏输入或好输入)。
所以我创建了一个网络。它包含一个具有 17 个神经元的输入层、一个存储层,其神经元数量是可调的,以及包含 1 个神经元的输出层,输出需要 0 或 1。在一个更简单的示例中,不使用输出反馈(我尝试使用输出反馈也一样,但没有任何改变)。
储层的内矩阵也是可调的。我在两个双精度值(最小值,最大值)之间生成权重,稀疏度可调节。如果值太大,它会使矩阵的光谱半径低于 1。储层可以具有 sigmoid 和 tanh 激活函数。
输入层以随机值完全连接到存储层。因此,在训练状态下,我使用训练数据计算内部 X(n) 储存器激活,将它们收集到矩阵 rowvise 中。使用所需的输出数据矩阵(现在是具有 1 或 0 个值的向量),我计算输出权重(从水库到输出)。水库完全连接到输出。如果有人使用回声状态网络现在我在说什么。我为此使用了伪逆方法。
问题是,我如何调整网络以便更好地泛化?使用外国数据集(不是训练数据集)达到超过 50-60% 的期望输出。如果我用训练数据集再次运行网络,它会给出非常好的结果,80-90%,但我想要的是更好地泛化。
我希望有人对回声状态网络也有这个问题。