sequence - 用于预测顺序数据的 pybrain LSTM 序列

标签 sequence prediction pybrain lstm

我使用 pybrain 编写了一个简单的代码来预测一个简单的顺序数据。 例如,0、1、2、3、4 的序列应该从网络获得输出 5。数据集指定了剩余的序列。 以下是我的代码实现

from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.datasets import SequentialDataSet
from pybrain.structure import SigmoidLayer, LinearLayer
from pybrain.structure import LSTMLayer

import itertools
import numpy as np

INPUTS = 5
OUTPUTS = 1
HIDDEN = 40

net = buildNetwork(INPUTS, HIDDEN, OUTPUTS, hiddenclass=LSTMLayer, outclass=LinearLayer, recurrent=True, bias=True) 

ds = SequentialDataSet(INPUTS, OUTPUTS)
ds.addSample([0,1,2,3,4],[5])
ds.addSample([5,6,7,8,9],[10])
ds.addSample([10,11,12,13,14],[15])
ds.addSample([16,17,18,19,20],[21])

net.randomize()

trainer = BackpropTrainer(net, ds)

for _ in range(1000):
    print trainer.train()

x=net.activate([0,1,2,3,4])
print x 

每次我屏幕上的输出都会一直显示 [0.99999999 0.99999999 0.9999999 0.99999999]。我错过了什么?培训不够?因为 trainer.train()

显示 86.625 的输出..

最佳答案

pybrain sigmoidLayer 正在实现 sigmoid 压缩函数,您可以在这里看到:

sigmoid squashing function code

相关部分是这样的:

def sigmoid(x):
""" Logistic sigmoid function. """
return 1. / (1. + safeExp(-x))

因此,无论 x 的值是多少,它只会返回 0 到 1 之间的值。出于这个原因以及其他原因,最好将输入和输出值缩放到 0 到 1 之间。例如,将所有输入除以最大值(假设最小值不低于 0),输出也一样。然后对结果进行反向操作(例如,如果您一开始除以 25,则乘以 25)。

此外,我不是 pybrain 专家,但我想知道您是否需要 OUTPUTS = 4?看起来您的数据中只有一个输出,所以我想知道您是否可以只使用 OUTPUTS = 1。

您也可以尝试将输入和输出缩放到 S 形曲线的特定部分(例如,在 0.1 和 0.9 之间)以使 pybrain 的工作更容易,但这会使前后缩放有点复杂。

关于sequence - 用于预测顺序数据的 pybrain LSTM 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25439910/

相关文章:

node.js - 为什么这个node.js代码没有串行执行?

bash - 如何将 palettegen 和 paletteuse 过滤器与 FFmpeg 一起用于图像序列?

javascript - 西蒙博弈机制(Javascript)——序列输入

random-forest - 如何在 python/sklearn 中交叉验证随机森林的预测?

python - 如何训练单目标识别?

python - OSX 上 PyBrain 上的 libsvm 用于 SVM

oracle - Oracle 序列存储在哪个表空间中?

machine-learning - 使用 Weka 预测 Google Play 评分

python - 如何使用保存在 HDF5 文件中的 Keras 训练模型进行预测?

python - PyBrain 网络中所有节点的激活值