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

У меня есть тренировочные данные, такие как:

train_x = np.random.randint(1, 20, (5, 4))
train_x
array([[ 4, 19,  5,  4],
       [ 5,  2,  2,  8],
       [11,  9, 17, 16],
       [18, 18,  7, 10],
       [ 2,  1,  1,  4]])
train_y = np.random.randint(1, 10, (5, 2))
train_y
array([[2, 7],
       [2, 9],
       [4, 5],
       [7, 8],
       [2, 8]])

А также проверочный набор данных, подобный этому:

validation_x = np.random.randint(1, 20, (5, 4))
validation_y = np.random.randint(1, 10, (5, 2))

Для train_x это означает:

                Jan  Feb   Mrch  April
 project_1      4     19    5    4
 project_2      5     2     2    8
 project_3      11    9     17   16
 project_4      18    18    7    10
 project_5      2     1     1    4

Для train_y это означает:

                May    June
 project_1      2        7
 project_2      2        9
 project_3      4        5
 project_4      7        8
 project_5      2        8

То есть у меня 5 выборок.Каждая выборка имеет шаг за последние 4 месяца в качестве входных данных и будущие 2 месяца в качестве выходных данных.Но для выходных данных y мне нужно предсказать данные различной продолжительности времени по сравнению с входными данными:

               May    June
 project      ?        ?
  1. Я знаю, как создать модель для многих для многих моделей.Например, использовать данные за последние 4 месяца для прогнозирования будущих результатов за 4 месяца.
  2. Мой вопрос заключается в том, как использовать KERAS для прогнозирования данных будущих месяцев, когда входные месяцы отличаются от выходных месяцев?

Удар - мой неправильный код:

train_x = train_x[:,:,np.newaxis]
train_y = train_y[:,:,np.newaxis]
validation_x = validation_x[:,:,np.newaxis]
validation_y = validation_y[:,:,np.newaxis]
def buildModel(shape):
    model = Sequential()
    model.add(LSTM(5, input_shape=(shape[1], shape[2]), return_sequences=True))
    model.add(TimeDistributed(Dense(1)))
    model.compile(loss="mse", optimizer="adam", metrics=['accuracy'])
    model.summary()
    return model
model = buildModel(train_x.shape)
callback = EarlyStopping(monitor="loss", patience=2, verbose=1, mode="auto")
history = model.fit(train_x, train_y, epochs=2, batch_size=10, validation_data=(validation_x, validation_y), callbacks=[callback])
ValueError: Error when checking target: expected time_distributed_1 to have shape (4, 1) but got array with shape (2, 1)

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...