在 嗨
我有一个类似的序列(加上更多的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左右。我应该如何调整我的网络以获得良好的效果?在
谢谢你
到目前为止,我对
Pybrain
没有任何经验,但是我使用过许多类似的ML包,但是我看到这是一个回归任务,而不是分类。因此,网络永远不会提供0作为结果,但它将提供的结果越来越接近于0或任何期望的序列成员。 因此,随着或者
^{pr2}$可能会达到0.01,然后是0.0025,以此类推。 如果你对这项工作有进一步的经验,请写信给我。在
众所周知,神经网络是通用的分配器,给定一个数据集,它将试图创建一个尽可能最好地表示数据集的内部状态。本质上是试图通过一个复杂的公式复制数据中的模式。在
神经网络不会准确地预测你是零,因为它是在一个连续的尺度上工作,而不是一个整数尺度。此外,它很可能预测平均值为0.1,因为大多数目标值为0,而其他目标值稍为正值,从而使激活的输出朝正方向倾斜。在
如果您想优化您的网络,我建议您保留一些来自培训的最后值,并使用一些作为验证集,以找到正确数量的训练时段和隐藏节点。同时以最后一个值作为测试集,对泛化误差进行了很好的估计。在
目前看来,你是在同一个数据上训练和测试,如果你想预测序列中更多的结果,这将给你带来对未来误差极为误导性的估计。在
注:我不知道你的训练方法是什么“周期”和“周期周期”。似乎你在训练几个时代,把错误聚集起来,然后进入一个新的周期。与每个历元运行一次数据集并输出平均误差相反。在
相关问题 更多 >
编程相关推荐