2017-02-21 91 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