Pybrain lstm序列错误预测

2024-06-02 06:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在 嗨

我有一个类似的序列(加上更多的0):

在[ 0,0.66 ,0 ,0.66 ,0 ,0 ,0 0.55分 ,0 ,0 ,0 ,3.18岁 ,0 ,0 ,2 0.6分 ,0]

我用python编写了以下代码,方法与:

Pybrain time series prediction using LSTM recurrent nets

from pybrain.datasets import SequentialDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure.modules import LSTMLayer
from pybrain.supervised import RPropMinusTrainer
from itertools import cycle

ds = SequentialDataSet(1, 1)
for sample, next_sample in zip(train, cycle(train[1:])):
    ds.addSample(sample, next_sample)

net = buildNetwork(1, 5, 1, hiddenclass=LSTMLayer, outputbias=False, recurrent=True)
trainer = RPropMinusTrainer(net, dataset=ds)
train_errors = [] 
EPOCHS_PER_CYCLE = 5
CYCLES = 50
EPOCHS = EPOCHS_PER_CYCLE * CYCLES
for i in range(CYCLES):
    trainer.trainEpochs(EPOCHS_PER_CYCLE)
    train_errors.append(trainer.testOnData())
    epoch = (i+1) * EPOCHS_PER_CYCLE
    print("\r epoch {}/{}".format(epoch, EPOCHS), end="")
    stdout.flush()

对列车组进行预测:

^{pr2}$

然后我注意到网络从不预测0,总是在0.10左右。我应该如何调整我的网络以获得良好的效果?在

谢谢你


Tags: samplefromimportdstrainepochsrecurrentcycle
2条回答

到目前为止,我对Pybrain没有任何经验,但是我使用过许多类似的ML包,但是我看到这是一个回归任务,而不是分类。因此,网络永远不会提供0作为结果,但它将提供的结果越来越接近于0或任何期望的序列成员。 因此,随着

EPOCHS_PER_CYCLE = 5

或者

^{pr2}$

可能会达到0.01,然后是0.0025,以此类推。 如果你对这项工作有进一步的经验,请写信给我。在

众所周知,神经网络是通用的分配器,给定一个数据集,它将试图创建一个尽可能最好地表示数据集的内部状态。本质上是试图通过一个复杂的公式复制数据中的模式。在

神经网络不会准确地预测你是零,因为它是在一个连续的尺度上工作,而不是一个整数尺度。此外,它很可能预测平均值为0.1,因为大多数目标值为0,而其他目标值稍为正值,从而使激活的输出朝正方向倾斜。在

如果您想优化您的网络,我建议您保留一些来自培训的最后值,并使用一些作为验证集,以找到正确数量的训练时段和隐藏节点。同时以最后一个值作为测试集,对泛化误差进行了很好的估计。在

目前看来,你是在同一个数据上训练和测试,如果你想预测序列中更多的结果,这将给你带来对未来误差极为误导性的估计。在

注:我不知道你的训练方法是什么“周期”和“周期周期”。似乎你在训练几个时代,把错误聚集起来,然后进入一个新的周期。与每个历元运行一次数据集并输出平均误差相反。在

相关问题 更多 >