请求示例:使用循环神经网络预测序列中的下一个值

有谁能提供一个使用(pybrain)Python的循环神经网络的实际示例,用于预测序列的下一个值吗?(我已经阅读了pybrain的文档,但我认为其中没有明确的示例。)我还找到了这个问题。但我无法理解它在更一般情况下的工作原理。因此,我在这里询问是否有人能提供一个使用pybrain和循环神经网络预测序列下一个值的清晰示例

举个例子。

假设我们有一组在[1,7]范围内的数字序列。

第一次运行(即第一个示例):1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6第二次运行(即第二个示例):1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6第三次运行(即第三个示例):1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7依此类推。

现在假设有一个新序列的开始:1 3 5 7 2 4 6 7 1 3

下一个值是什么?

这个问题可能看起来有些懒惰,但我认为缺乏一个使用pybrain进行此操作的好例子。


此外:如果存在多个特征,该如何操作:

示例:

假设我们有几个序列(每个序列有2个特征),在[1,7]范围内。

第一次运行(即第一个示例):特征1:1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6                                  特征2:1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7第二次运行(即第二个示例):特征1:1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6                                    特征2:1 2 3 7 2 3 4 6 2 3 5 6 7 2 4 7 1 3 3 5 6第三次运行(即第三个示例):特征1:1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7                                  特征2:1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6依此类推。

现在假设有新序列的开始:

                                            特征1:1 3 5 7 2 4 6 7 1 3                                            特征2:1 2 3 7 2 3 4 6 2 4

下一个值是什么?


只要与这些示例相似,并且有深入的解释,您可以使用自己的示例。


回答:

Issam Laradji的方法对我预测序列的序列有效,除了我的pybrain版本需要为UnserpervisedDataSet对象使用元组:

from pybrain.tools.shortcuts import buildNetworkfrom pybrain.supervised.trainers import BackpropTrainerfrom pybrain.datasets import SupervisedDataSet,UnsupervisedDataSetfrom pybrain.structure import LinearLayerds = SupervisedDataSet(21, 21)ds.addSample(map(int,'1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6'.split()),map(int,'1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6'.split()))ds.addSample(map(int,'1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6'.split()),map(int,'1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split()))net = buildNetwork(21, 20, 21, outclass=LinearLayer,bias=True, recurrent=True)trainer = BackpropTrainer(net, ds)trainer.trainEpochs(100)ts = UnsupervisedDataSet(21,)ts.addSample(map(int,'1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split()))[ int(round(i)) for i in net.activateOnDataset(ts)[0]]

结果是:

=> [1, 2, 5, 6, 2, 4, 5, 6, 1, 2, 5, 6, 7, 1, 4, 6, 1, 2, 2, 3, 6]

要预测较小的序列,只需按此方式训练它,可以是子序列或重叠序列(此处显示重叠):

from pybrain.tools.shortcuts import buildNetworkfrom pybrain.supervised.trainers import BackpropTrainerfrom pybrain.datasets import SupervisedDataSet,UnsupervisedDataSetfrom pybrain.structure import LinearLayerds = SupervisedDataSet(10, 11)z = map(int,'1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6 1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6 1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split())obsLen = 10predLen = 11for i in xrange(len(z)):  if i+(obsLen-1)+predLen < len(z):    ds.addSample([z[d] for d in range(i,i+obsLen)],[z[d] for d in range(i+1,i+1+predLen)])net = buildNetwork(10, 20, 11, outclass=LinearLayer,bias=True, recurrent=True)trainer = BackpropTrainer(net, ds)trainer.trainEpochs(100)ts = UnsupervisedDataSet(10,)ts.addSample(map(int,'1 3 5 7 2 4 6 7 1 3'.split()))[ int(round(i)) for i in net.activateOnDataset(ts)[0]]

结果是:

=> [3, 5, 6, 2, 4, 5, 6, 1, 2, 5, 6]

不太好…

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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