2017-02-21 92 views
0

我想创建一个有状态的LSTMStateful LSTM的实现

我的数据是68871 x 43,其中的功能在列号。 1-42并在第号栏中加上标签。对数据进行分类43个

我keras LSTM代码

import numpy 
import matplotlib.pyplot as plt 
import math 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import LSTM, Dropout 
from sklearn.preprocessing import MinMaxScaler 
from sklearn.metrics import mean_squared_error 
# convert an array of values into a dataset matrix 
def create_dataset(dataset, look_back): 
    dataX, dataY= [], [] 
    for i in range(len(dataset)-look_back-1): 
     a = dataset[i:(i+look_back), 0:43] 
     dataX.append(a) 
     dataY.append(dataset[i + look_back, 43]) 
    return numpy.array(dataX), numpy.array(dataY) 
# fix random seed for reproducibility 
#numpy.random.seed(7) 
# load the dataset 
look_back=5 
dataset = numpy.loadtxt("Source.txt", delimiter=" ") 
# normalize the dataset 
scaler = MinMaxScaler(feature_range=(0, 1)) 
dataset[:,0:43] = scaler.fit_transform(dataset[:,0:43]) 
# split into train and test sets 
train_size = int(len(dataset) * 0.67) 
test_size = len(dataset) - train_size 
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] 
trainX, trainY = create_dataset(train, look_back) 
testX, testY = create_dataset(test, look_back) 
print trainX.shape 
#trainX=numpy.reshape(trainX,(46117,43,25)) 
# create and fit the LSTM network 
model = Sequential() 
model.add(LSTM(10, input_dim=43)) 
#model.add(Dropout(0.3)) 
model.add(Dense(1)) 
model.compile(loss='mean_squared_error', optimizer='adagrad') 
model.fit(trainX, trainY, nb_epoch=10, batch_size=5) 
model.evaluate(testX, testY, batch_size=1) 

请建议什么样的变化来进行,以使LSTM状态 预先感谢这么多!!!!!

回答

0
model.add(LSTM(10, input_shape=(5,43), stateful=True)) 

是你在找什么我想。见here for documentation。另外,如果你想使用stateful lstm,那么洗牌数据(这是默认值)是没有意义的。因此,修改此行也是如此:

model.fit(trainX, trainY, nb_epoch=10, batch_size=5, shuffle=False) 
+0

输入形状必须在model.add()中提供,我尝试过很多输入大小,但它是抛出错误。 你能推荐一些有效的输入大小吗? – user3218279

+0

print trainX.shape给出了什么? –

+0

它打印(46137,5,43) :46137是没有。火车样本 5是lstm时间步长 43是输入维数 – user3218279