使用Pybrain构建循环神经网络进行回归预测 – 如何正确启动已训练网络

我正在尝试使用循环神经网络解决回归任务(我使用pybrain来构建它)。当我的网络训练完成后,我想用它来进行预测。但是,循环网络的预测会受到其之前预测的影响(而之前的预测又会受到更早之前的预测的影响,等等)。

问题是 – 一旦网络训练完成,我想要在一个数据集上使用它进行预测,如何正确启动预测过程。如果我只是在数据集中的第一个示例上调用.activate()进行预测,这意味着循环连接会将0传递给网络,这将以不希望的方式影响后续的预测。有没有办法强制完全训练好的循环网络认为之前的激活结果是一个特殊值?如果有,这里最好的值是什么(可能是可能的激活输出值的平均值或类似的东西吗?)

更新。好吧,既然一天内没有人对如何在pybrain中使用循环网络提出任何想法,让我稍微改变一下表述,忘记pybrain。假设我构建了一个用于回归的pybrain网络(例如,预测股票价格)。网络将与一个具有10个特征的数据集一起使用。我在数据集中添加了一个额外的特征,并用数据集中的前一个价格填充它。因此,我复制了一个循环网络(额外的输入神经元复制了循环连接)。问题是:

1)在训练数据集中,我用前一个价格填充这个额外的特征。但对训练数据集中的第一条记录该怎么办(我不知道前一个价格)。应该留为0吗?这应该是个坏主意,前一个价格不是零。我应该使用训练数据集中价格的平均值吗?还有其他建议吗?2)同样,第1问的问题,但针对在测试数据集上运行完全训练好的网络。在我的网络对测试数据集运行时,我应该始终获取其预测结果,并在进行下一次预测之前将结果放入这个新的第11个输入神经元中。但同样,当我需要运行数据集中的第一个预测时该怎么办(因为我不知道前一个价格)?


回答:

这完全不是我对循环网络的理解。

当你最初创建一个循环网络时,循环连接(例如中间层到中间层)将被随机化,就像任何其他连接一样。这是它们的起始值。每次你激活一个循环网络时,你都会改变这些连接,因此你的输出也会被改变。

按照这个逻辑,如果你编写了一些代码来训练一个循环网络并将其保存到文件中,你将在文件中得到一个准备好使用真实数据的循环网络,尽管第一次调用将包含训练期间最后一次激活的循环反馈。

你想要做的事情是确保每次你希望保留其状态时重新保存你的循环网络。对于一个简单的前馈神经网络,这不会是一个问题,因为你只在训练期间改变状态,但对于一个循环网络,你希望在任何激活后保留状态,因为循环权重会更新。

我认为循环网络不会因为循环连接的初始值而受到污染;当然,我不会信任第一次调用,但考虑到它们是为序列设计的,这在任何情况下都不应该是一个问题。

关于你更新的问题,我完全不相信仅仅添加一个输入节点就能模拟这一点。事实上,我怀疑你会完全破坏网络的预测能力。在你的例子中,假设你有10个输入节点,并且假设你有20个中间节点,仅仅通过添加一个额外的输入节点,你将生成额外的20个连接到网络,这些连接最初是随机化的。每个额外的点都会加剧这种变化,在添加10个额外的输入节点后,你将拥有与训练好的连接一样多的随机连接。

我认为这行不通,我当然不相信它会以你认为的方式模拟循环学习。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注