input_shape в LSTM - PullRequest
       37

input_shape в LSTM

0 голосов
/ 21 сентября 2019

У меня есть следующий фрагмент кода:

    X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
    X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))


    model = Sequential()
    model.add(LSTM(200, activation='relu', input_shape=(X_train.shape[0], 1, X_train.shape[2]), return_sequences=False))
    model.compile(optimizer='adam', loss='mean_squared_error')
    model.fit(X_train, y_train, epochs=100, batch_size=32)
    y_pred = model.predict(X_test)

Однако я получаю следующую ошибку:

ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4

Исходные формы X_train и X_test:

X_train: 1483, 13
X_test: 360, 13

и после изменения они становятся:

X_train: 1483, 1, 13
X_test: 360, 1, 13

Я знаю, что это может быть дубликатом, но ни один из ответов в Интернете, кажется, не работает для меня.

1 Ответ

0 голосов
/ 21 сентября 2019

input_shape=(X_train.shape[0], 1, X_train.shape[2]) неверно.

У LSTM должны быть двумерные входные фигуры (что означает трехмерные внутренние тензоры).
l - входная фигура должна содержать (sequence_length, features_per_step).
- это означает, что внутренняя форма будет (free_batch_size, sequence_length, features_per_step)

В таком случае ваши данные должны быть 3D, хорошо, но input_shape должен быть 2D.
Теперь, sequence_length абсолютно необходим для работы рекуррентного слоя, если у вас есть sequence_length = 1, это абсолютно бесполезно., если вы не собираетесь stateful=True, который включает в себя гораздо более сложный код.

...