我正在尝试在这样的大数据序列上训练模型[0.2 0.1 0.1 ..... 0.4 0.8]。我创建长度为 60 的 X 向量作为输入,Y 缩放器数字作为标签(这意味着 LSTM 读取前 60 个数字作为输入(X_train 中的一行),第 61 个数字作为输出标签(y_train 中的行))。
model = Sequential()
model.add(LSTM(units = 50, return_sequences = True , input_shape = (X_train.shape[1], 1)))
model.add(Dense(units = 1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error')
model.fit(X_train, y_train, epochs = 100, batch_size = 32)
和:
X_train.shape = (1000,60,1) , y_train.shape = (1000,)
到这里还可以,但问题出在预测部分。我想做的是创建一个 (60*1) 输入向量并用它来预测我序列中的下一个数字。然后将新的预测数字添加到我的序列中以预测下一个数字(第二个预测数字),依此类推。为了这个目标,我创建了一个新模型,从以前的模型中检索权重,然后只给 new_model 提供一个 (60*1) 向量来预测下一个数字。然后将预测的数字添加到序列中,并将输入向量向右移动一个数字(使用新的预测数字进行下一个数字预测)。
new_model = Sequential()
new_model.add(LSTM(units = 50, return_sequences = True , input_shape = (1 , 60 , 1 )))
new_model.add(Dense(1))
old_weights = model.get_weights()
new_model.set_weights(old_weights)
new_model.compile(optimizer = 'adam', loss = 'mean_squared_error')
inputs = []
for i in range(10):
inputs = dataset_total[len(dataset_total) - 60:].values
inputs = np.reshape(inputs, (1 , 60, 1))
predicted = new_model.predict(inputs)
inputs.append(predicted)
但我得到的是这样的错误:
ValueError: Input 0 is incompatible with layer lstm_61: expected
ndim=3, found ndim=4
我不知道如何解决这个问题!
这里也有一个类似但没有相关的答案(澄清): 如何用 Keras 预测时间范围的未来值?