Как я могу обучить модель LSTM с несколькими наборами данных временных рядов? - PullRequest
0 голосов
/ 16 января 2019

У меня есть несколько наборов данных временных рядов, которые я отформатировал, чтобы они выглядели следующим образом:

+-----------------+------------------+
|         X       |        Y         |
+-----------------+------------------+
| [0.1, 0.3, 0.4] | [0.5, 0.8, 0.9]  |
+-----------------+------------------+
| [0.3, 0.4, 0.5] | [0.8, 0.9, 0.91] |
+-----------------+------------------+
| [0.4, 0.5, 0.8] | [0.9, 0.91, 0.93]|
+-----------------+------------------+
|       ...       |       ...        |
+-----------------+------------------+

Для каждого набора данных X содержит вектор значений, которые необходимо проверить для выполнения прогнозирования (прогнозирования следующих 3 значений), а Y содержит вектор следующих 3 значений, которые должны быть прогнозированы.

У меня есть несколько наборов данных, подобных упомянутым выше, и многие другие наборы данных, которые можно прогнозировать, содержащие только часть X.

Мой вопрос: как я могу приспособить сеть LSTM, чтобы тренироваться с информацией обо всех наборах обучающих данных? Могу ли я объединить их значения X, с одной стороны, и значения Y, с другой стороны?

У меня есть следующий код, но я не уверен, хорошо ли он реализован.

# listadx and listady are lists containing the concatenation of X and Y vectors of all the datasets, respectively.

# split into train and test sets
train_size = int(len(listadx) * 0.67)
test_size = len(listadx) - train_size

trainx, testx = listadx[0:train_size,:], listadx[train_size:len(listadx),:]
trainy, testy = listady[0:train_size,:], listady[train_size:len(listady),:]



# reshape input to be [samples, time steps, features]
trainx = numpy.reshape(trainx, (trainx.shape[0], 1, trainx.shape[1]))
testx = numpy.reshape(testx, (testx.shape[0], 1, testx.shape[1]))



# create and fit the LSTM network
model = Sequential()
model.add(LSTM(4, input_shape=(trainx.shape[1], trainx.shape[2])))
model.add(Dense(outputs))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainx, trainy, epochs=100, batch_size=1, verbose=2)


# make predictions
trainPredict = model.predict(trainx)
testPredict = model.predict(testx)

trainPredict возвращает мне вектор с 3 значениями. Это значения Y?

...