我有一个包含 600 个连续点 (x(t), y(t)) 的单个训练批处理,其中 x(t) 是一个 25 维向量,y(t) 是我的目标 (1 dim)。我想训练一个 LSTM 来预测在给定一些额外的 x(t) [t> 600] 的情况下该系列将如何继续。我尝试了以下模型:
model = Sequential()
model.add(LSTM(128, input_shape = (600,25), batch_size = 1, activation= 'tanh', return_sequences = True))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=20 ,verbose=2) prediction
prediction = model.predict(testX, batch_size = 1)
拟合工作正常,但我在预测步骤中不断收到以下错误:
Error when checking : expected lstm_46_input to have shape (1, 600, 25) but got array with shape (1, 10, 25)
我错过了什么?
这是我的形状:
trainX.shape = (1,600,25)
trainY.shape = (1,600,1)
testX.shape = (1,10,25)
最佳答案
根据 Keras 文档,LSTM(或任何 RNN)层的输入应为 (batch_size, timesteps, input_dim)
您的输入形状为
trainX.shape = (1,600,25)
因此,这意味着对于训练,您仅传递一个具有 600 个时间步长和每个时间步长 25 个特征的数据。但我感觉你实际上有 600 个训练数据,每个训练数据都有 25 个时间步 和每个时间步 1 个特征。我猜你的输入形状 (trainX) 应该是 600 x 25 x 1
。训练目标 (trainY) 应该是 600 x 1
如果我的假设是正确的,那么您的测试数据应该是 10 x 25 x 1
的形状。第一个 LSTM 层应该写成
model.add(LSTM(128, input_shape = (25,1), batch_size = 1, activation= 'tanh', return_sequences = False))
关于keras - 如何设置 Keras LSTM 进行时间序列预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790846/