训练 LSTM 神经网络以预测 pybrain、python 中的时间序列
Posted
技术标签:
【中文标题】训练 LSTM 神经网络以预测 pybrain、python 中的时间序列【英文标题】:Training an LSTM neural network to forecast time series in pybrain, python 【发布时间】:2014-08-27 03:58:02 【问题描述】:我有一个使用 PyBrain 创建的神经网络,旨在预测时间序列。
我正在使用顺序数据集函数,并尝试使用 5 个先前值的滑动窗口来预测第 6 个。我的问题之一是我无法弄清楚如何通过将 5 个先前的值附加到输入并将第 6 个作为输出来创建所需的数据集。
我也不确定如何在网络经过训练后准确预测系列中的值。
在下面发布我的代码:
from pybrain.datasets import SupervisedDataSet
from pybrain.datasets import SequentialDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.supervised.trainers import RPropMinusTrainer
from pylab import ion, ioff, figure, draw, contourf, clf, show, hold, plot
from pybrain.structure import RecurrentNetwork
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer, TanhLayer
from pybrain.structure import FullConnection
from pybrain.structure import LSTMLayer
from pybrain.structure import BiasUnit
from pybrain.rl.learners.valuebased import Q
import pybrain
import matplotlib as plt
import translate
import time
import pickle
import scipy as sp
import numpy as np
import pylab as pl
import itertools
#Opening data from database
data = translate.translate(3600)
time, price, volume = zip(*data)
#Creating data lists instead of tuples
timeList = []
priceList = []
volumeList = []
for record in time:
timeList.append(record)
for record in price:
priceList.append(record)
for record in volume:
volumeList.append(record)
#Creating lookback window and target
datain = priceList[:5]
dataout = priceList[6]
print datain
print dataout
#Creating the dataset
ds = SequentialDataSet(5, 1)
for x, y in itertools.izip(datain, dataout):
ds.newSequence()
ds.appendLinked(tuple(x), tuple(y))
print (x, y)
print ds
#Building the network
n = RecurrentNetwork()
#Create the network modules
n.addInputModule(SigmoidLayer(5, name = 'in'))
n.addModule(LSTMLayer(100, name = 'LSTM'))
n.addModule(LSTMLayer(100, name = 'LSTM2'))
n.addOutputModule(SigmoidLayer(1, name = 'out'))
#Add the network connections
n.addConnection(FullConnection(n['in'], n['LSTM'], name = 'c_in_to_LSTM'))
n.addConnection(FullConnection(n['in'], n['LSTM2'], name = 'c_in_to_LSTM2'))
n.addConnection(FullConnection(n['LSTM'], n['out'], name = 'c_LSTM_to_out'))
n.addConnection(FullConnection(n['LSTM2'], n['out'], name = 'c_LSTM2_to_out'))
n.sortModules()
n.randomize()
#Creating the trainer
trainer = BackpropTrainer(n, ds)
#Training the network
#for i in range (1000):
# print trainer.train()
#Make predictions
#Plotting the results
pl.plot(time, price)
pl.show()
上面的代码给出: TypeError: izip 参数 #2 必须支持迭代
我已经看到下面链接的问题但是我没有成功
Event Sequences, Recurrent Neural Networks, PyBrain
关于这个伟大网站的第一个问题,感谢任何帮助
【问题讨论】:
【参考方案1】:#Creating lookback window and target
datain = priceList[:5]
dataout = priceList[6]
不是专家。但似乎你的 datain 是一个长度为 6 的列表,而 dataout 不是。
【讨论】:
【参考方案2】:我猜 TypeError 说明了一切。 priceList[:5]
是一个列表,因此是可迭代的,priceList[6]
是单个元素。
你可能想要类似的东西
datain = priceList[:5]
dataout = priceList[6:6]
这将使dataout
成为一个包含单个元素的列表。
【讨论】:
以上是关于训练 LSTM 神经网络以预测 pybrain、python 中的时间序列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pybrain 黑盒优化训练神经网络以监督数据集?