ожидаемый ndim = 3, найденный ndim = 2 - PullRequest
0 голосов
/ 29 января 2019

Я новичок в Keras и пытаюсь внедрить последовательность из последовательности в последовательность LSTM.В частности, у меня есть набор данных с 9 функциями, и я хочу предсказать 5 непрерывных значений.

Я разделил тренировочный набор и набор тестов и их форму соответственно:

X TRAIN (59010, 9)

X TEST (25291, 9)

Y TRAIN (59010, 5)

Y TEST (25291, 5)

В настоящий момент LSTM чрезвычайно прост:

model = Sequential()
model.add(LSTM(100, input_shape=(9,), return_sequences=True))
model.compile(loss="mean_absolute_error", optimizer="adam", metrics= ['accuracy'])

history = model.fit(X_train,y_train,epochs=100, validation_data=(X_test,y_test))

Но у меня естьследующая ошибка:

ValueError: вход 0 несовместим со слоем lstm_1: ожидаемый ndim = 3, найденный ndim = 2

Может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 29 января 2019

Слой LSTM ожидает, что входные данные будут иметь форму (batch_size, timesteps, input_dim).В keras вам нужно передать (timesteps, input_dim) для аргумента input_shape.Но вы устанавливаете input_shape (9,).Эта форма не включает измерение временных шагов.Проблема может быть решена добавлением дополнительного измерения в input_shape для измерения времени.Например, добавление дополнительного измерения со значением 1 может быть простым решением.Для этого вам нужно изменить форму входного набора данных (X Train) и форму Y.Но это может быть проблематично, поскольку временное разрешение равно 1, и вы вводите одно значение, а не последовательность значений

x_train = x_train.reshape(-1, 1, 9)
x_test  = x_test.reshape(-1, 1, 9)
y_train = y_train.reshape(-1, 1, 5)
y_test = y_test.reshape(-1, 1, 5)

model = Sequential()
model.add(LSTM(100, input_shape=(1, 9), return_sequences=True))
model.add(LSTM(5, input_shape=(1, 9), return_sequences=True))
model.compile(loss="mean_absolute_error", optimizer="adam", metrics= ['accuracy'])

history = model.fit(X_train,y_train,epochs=100, validation_data=(X_test,y_test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...