2017-02-21 37 views
0

Я хочу, чтобы создать динамическую LSTMВнедрение Stateful LSTM

мои данные из 68871 х 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

какой принт поездX.shape отдавать? –

+0

это отпечатки (46137, 5, 43) : 46137 - нет. образцов поезда 5 является временным временем lstm 43 - количество входных измерений – user3218279

 Смежные вопросы

  • Нет связанных вопросов^_^