【问题标题】:How can I fix the problem with this LSTM model?如何解决此 LSTM 模型的问题?
【发布时间】:2022-01-02 17:50:07
【问题描述】:

我对 LSTM 中的训练模型有疑问。错误是: ValueError: 层序号_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-array 有 4 个维度。

标签: python keras neural-network lstm


【解决方案1】:

预期的输入数据形状为(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))

【讨论】:

  • 你好,我的朋友,在使用你的建议后,模型只运行了一个 epoch 并检测到如下错误: ValueError: Input 0 of layer sequence is incompatible with the layer: expected ndim=3, found ndim= 4.收到的完整形状:(无、5、1、1)我在将数据拟合到模型之前使用了你的代码
  • 我也将你的代码用于 X_val 和模型运行,但损失和 root_mean_squared_error 是 nan!
  • @Amirhossein 如果运行,请接受我的回答。关于你的 nan 问题,它可能是梯度爆炸的结果。检查此链接它可能会对您有所帮助。 stackoverflow.com/questions/40050397/…
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
相关资源
最近更新 更多