2014-07-06 79 views
1

我有一個使用PyBrain創建的神經網絡,用來預測時間序列。培訓一個LSTM神經網絡來預測pybrain的時間序列,python

我正在使用順序數據集函數,並嘗試使用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() 

上面的代碼給出: 類型錯誤:izip參數#2必須支持迭代

我看到下面鏈接但是這個問題我一直沒成功

Event Sequences, Recurrent Neural Networks, PyBrain

關於這個偉大的網站的第一個問題,任何幫助表示讚賞

回答

0

#Creating lookback window and target datain = priceList[:5] dataout = priceList[6]

不是專家。但是看起來你的datain是一個長度= 6的列表,而數據輸出不是。

0

我猜TypeError說的都是。鑑於priceList[:5]是一個列表,因此可迭代,priceList[6]是一個單一的元素。

你可能想是這樣

datain = priceList[:5] 
dataout = priceList[6:6] 

這將使dataout只有一個元素的列表。

相關問題