我该如何解决这个 LSTM 模型的问题?

How can I fix the problem with this LSTM model?

我在 LSTM 中训练模型时遇到问题。错误是: ValueError:层 sequential_8 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。已收到完整形状:(None, 5, 1, 1)

我感谢任何人解决我的问题

密码是:

def df_to_X_y(df,window_size=5):
    df_as_np = df.to_numpy()
    X = []
    y = []
    for i in range(len(df_as_np)-window_size):
        row = [[a] for a in df_as_np[i:i+5]]
        X.append(row)
        label = df_as_np[i+5]
        y.append(label)
    return np.array(X), np.array(y)

X, y = df_to_X_y(scaled_data_frame,window_size=5)
X.shape,y.shape

答案是:((306234, 5, 1, 1), (306234, 1))

X_train,y_train = X[:245000],y[:245000]
X_val,y_val = X[245000:275620],y[245000:275620]
X_test,y_test = X[275620:],y[275620:]
X_train.shape,y_train.shape,X_val.shape,y_val.shape,X_test.shape,y_test.shape

答案是:((245000, 5, 1, 1), (245000, 1), (30620, 5, 1, 1), (30620, 1), (30614, 5, 1, 1), (30614, 1))

from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import *
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.losses import MeanSquaredError
from tensorflow.keras.metrics import RootMeanSquaredError
from tensorflow.keras.optimizers import Adam

model = Sequential()
model.add(InputLayer((5,1)))
model.add(LSTM(128))
model.add(Dense(8,'relu'))
model.add(Dense(1,'linear'))

cp = ModelCheckpoint('model',save_best_only=True)
model.compile(loss=MeanSquaredError(), optimizer=Adam(learning_rate=0.0001),
             metrics=[RootMeanSquaredError()])

model.fit(X_train,y_train, validation_data=(X_val,y_val), epochs=10,
          callbacks=[cp])

预期的输入数据形状是 (batch_size, timesteps, data_dim),但您的 X_train NumPy 数组有 4 个维度。所以,为了解决这个问题,你应该这样重塑你的输入数据:

X_train = X_train.reshape((-1,5,1))
X_val   = X_val.reshape((-1,5,1))