【发布时间】: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_trainNumPy-array 有 4 个维度。
标签: python keras neural-network lstm