Python Pybrain-lstm序列错误预测

Python Pybrain-lstm序列错误预测,python,neural-network,sequence,pybrain,lstm,Python,Neural Network,Sequence,Pybrain,Lstm,嗨 我有一个这样的序列(加上更多的零): [ 0, 0.66 , 0 ,0.66 ,0 ,0 ,0 ,0.55 ,0 ,0 ,0 ,3.18 ,0 ,0 2. ,0.6 ,0] 我用python编写了以下代码,其方式与: 从pybrain.datasets导入SequentialDataSet 从pybrain.tools.shortcuts导入buildNetwork 从pybrain.structure.modules导入LSTMLayer 从pybrain.supervised导入RPR

我有一个这样的序列(加上更多的零):

[ 0, 0.66 , 0 ,0.66 ,0 ,0 ,0 ,0.55 ,0 ,0 ,0 ,3.18 ,0 ,0 2. ,0.6 ,0]

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

从pybrain.datasets导入SequentialDataSet
从pybrain.tools.shortcuts导入buildNetwork
从pybrain.structure.modules导入LSTMLayer
从pybrain.supervised导入RPROPSTAINER
从itertools导入周期
ds=顺序数据集(1,1)
对于样本,zip中的下一个样本(序列,循环(序列[1:]):
ds.addSample(样本,下一个样本)
net=buildNetwork(1,5,1,hiddenclass=LSTMLayer,outputbias=False,returnal=True)
培训师=培训师(网络,数据集=ds)
列车错误=[]
每个周期的周期=5
周期=50
历元=历元/历元周期*历元周期
对于范围内的i(周期):
培训师.培训周期(每个周期的周期)
train_errors.append(trainer.testOnData())
历元=(i+1)*每周期历元
打印(“\r epoch{}/{}”。格式(epoch,epoch),end=”“)
stdout.flush()
获取列车组上的预测:

res=[]
对于示例,ds.getSequenceIterator(0)中的目标:
r=净激活(示例)
res.append(r)
然后我注意到网络从不预测零,总是在0.10左右。我应该如何调整我的网络以获得好的结果


谢谢

到目前为止,我还没有任何关于
Pybrain
的经验,但是我使用了许多类似的ML软件包,但我认为这是一个回归任务,而不是分类。因此,网络永远不会提供0作为结果,但它将提供越来越接近0或序列中任何所需成员的结果。 因此,通过增加

EPOCHS_PER_CYCLE = 5

可能会达到0.01,然后是0.0025,依此类推。
如果您有关于此任务的更多经验,请写信给我。

到目前为止,我没有任何关于
Pybrain
的经验-但是我使用了许多类似的ML软件包-,但我认为这是一个回归任务,而不是分类。因此,网络永远不会提供0作为结果,但它将提供越来越接近0或序列中任何所需成员的结果。 因此,通过增加

EPOCHS_PER_CYCLE = 5

可能会达到0.01,然后是0.0025,依此类推。
如果您对这项任务有进一步的经验,请写信给我。

神经网络被认为是通用的挪用者,给定一个数据集,它将尝试创建一个尽可能最好地表示该数据集的内部状态。本质上,试图通过复杂的公式复制数据中的模式

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

如果你想调整你的网络,我建议你保留训练中最后的一些值,并使用一些值作为验证集,以找到正确数量的训练历元和隐藏节点。同时使用最后的值作为测试集,对泛化误差进行良好的估计

目前,您似乎正在对相同的数据进行培训和测试,如果您想预测序列中的更多结果,那么这些数据将给您带来对未来错误的极度误导性估计


注意:我不确定你的训练方法中的“周期”和“时代周期”。看起来您正在进行几个时代的培训,将错误汇总,然后进入新的周期。与每个历元只运行一次数据集并输出平均误差相反。

神经网络被认为是通用的挪用器,给定一个数据集,它将尝试创建一个尽可能最好地表示数据集的内部状态。本质上,试图通过复杂的公式复制数据中的模式

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

如果你想调整你的网络,我建议你保留训练中最后的一些值,并使用一些值作为验证集,以找到正确数量的训练历元和隐藏节点。同时使用最后的值作为测试集,对泛化误差进行良好的估计

目前,您似乎正在对相同的数据进行培训和测试,如果您想预测序列中的更多结果,那么这些数据将给您带来对未来错误的极度误导性估计


注意:我不确定你的训练方法中的“周期”和“时代周期”。看起来您正在进行几个时代的培训,将错误汇总,然后进入新的周期。与为每个历元运行一次数据集并输出平均误差相反。

在更改周期或历元时仍然获得0.1值:/n包括其他结果在内的确切输出是什么?这是我的训练:这是输出:抱歉,我没有找到更好的方法向您显示,因此我认为您必须将标准化输入数据传递给学习者必须这样做,其值应介于0和1之间。很抱歉,这并不能提高输出。我认为lstm不是解决这类问题的正确模型。更改周期或历元时仍然得到0.1的值:/n包括其他结果在内,您的确切输出是什么?这是我的训练:这是输出:抱歉,我没有找到更好的方式向您展示,所以我认为您必须将标准化输入数据传递给学员,所以,它的值应该介于0和1之间。很抱歉,这并没有改善输出。我想是lst