首页 文章

用于回归的Pybrain循环网络 - 如何正确地启动经过训练的网络进行预测

提问于
浏览
2

我试图使用递归神经网络解决回归任务(我使用pybrain来构建它) . 在我的网络适合后,我想用它来做出预测 . 但是对复发网络的预测受到其先前预测的影响(其依次受到预测之前的预测等) .

问题是 - 一旦网络被训练并且我想在数据集上用它做出预测,如何正确地启动预测过程 . 如果我只是在数据集的第一个例子中调用.activate()来进行预测,这意味着循环连接将0传递给网络,并且它将以不希望的方式影响后续预测 . 是否有办法强制完全训练有素的复发网络认为以前的激活结果具有某种特殊 Value ?如果是,那么哪个值最好(可能是激活输出值的平均值或类似的smth?)

UPDATE . 好吧,因为在一天之内没有人对如何使用pybrain中的循环网络做任何想法,让我可能有点改变一个忘记pybrain的公式 . 考虑一下我为回归构建了一个pybrain网络(例如,预测股票的价格) . 网络将与具有10个功能的数据集一起使用 . 我在数据集中添加了一个附加功能,并使用数据集的先前价格填充它 . 因此,我复制了一个循环网络(aditional input neuron复制了循环连接) . 问题是:

1)在培训数据集中,我使用之前的价格填写此附加功能 . 但是如何处理训练数据集中的FIRST记录(我不知道之前的价格) . 应该留0吗?这应该是一个坏主意,以前的价格不是零 . 我应该在训练数据集中使用价格均值吗?还有其他建议吗? 2)同样,问题与#1相同,但是针对测试数据集运行完全训练的网络 . 在针对测试数据集运行我的网络时,我应该总是选择其预测,并在进行下一次预测之前将结果放入这个新的第11个输入神经元 . 但是,当我需要在数据集中运行第一个预测时,该怎么办(因为我不知道之前的价格)?

1 回答

  • 2

    这根本不是我对复发网络的理解 .

    当您最初创建一个循环网络时,循环连接(比如中间层到中间层)将被随机化,就像任何其他连接一样 . 这是他们的起始 Value . 每次激活循环网络时,您都将更改这些连接,从而改变输出 .

    如果您编写了一些代码来训练一个经常性的网络并将其保存到一个文件中,那么你可以在该文件中使用一个经常性的网络来准备好您的实际数据,尽管第一次调用将包含来自您在培训期间的最后一次激活 .

    您要做的是确保在您希望保持其状态的任何时候重新保存您的经常性网络 . 对于简单的FFN,这不是问题,因为您只在训练期间更改状态,但对于循环网络,您将希望在任何激活后保持状态,因为重复的权重将更新 .

    我不认为由于经常性连接的初始值而导致经常性网络中毒;当然我不相信第一次调用,但鉴于它们是针对在任何一种情况下都不应该成为问题的序列而设计的 .

    关于您更新的问题,我完全不相信任意添加单个输入节点会模拟这个问题 . 事实上,我怀疑你绝对打破了网络的预测能力 . 在您的示例中,从10个输入节点开始,并假设您有20个中间节点,只需添加一个额外的输入节点,您将生成另外20个连接到网络,最初将被随机化 . 每增加一个点就会使这一变化更加复杂,并且在10个额外的输入节点之后,您将获得与训练有关的随机连接数 .

    我认为这不起作用,我当然不相信它会以你的思维方式模拟反复学习 .

相关问题