ValueError: Input 0 of layer "lstm_121" is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 50)

Issue

I’m building an LSTM model for time series data, but I got this error:

ValueError: Input 0 of layer "lstm_121" is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 50)

My model:

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(50, recurrent_dropout=0.3))
model.add(LSTM(50, recurrent_dropout=0.3))
model.add(LSTM(50, recurrent_dropout=0.3))
model.add(Dense(1))

The dimension of the X_train is (1198, 60, 1) and the one of y_train is (1198,).

Solution

The problem is that the LSTM layer expects a 3D input, while your 3rd and 4th LSTM layers are receiving a 2D input of shape (None, 50) since return_sequences is set to False (the default) in the 2nd and 3rd LSTM layers, while it should be set to True.

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

X_train = np.random.normal(size=(1198, 60, 1))
y_train = np.mean(X_train, axis=1)

model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=X_train.shape[1:]))
model.add(LSTM(50, return_sequences=True, recurrent_dropout=0.3))
model.add(LSTM(50, return_sequences=True, recurrent_dropout=0.3))
model.add(LSTM(50, recurrent_dropout=0.3))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=10, batch_size=128)

Answered By – Flavia Giammarino

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published