【发布时间】:2017-09-27 21:17:41
【问题描述】:
当我使用 Keras LSTM 预测时间序列数据时,我在尝试使用 50 的批量大小训练模型时遇到错误,然后尝试使用 50 的批量大小对同一模型进行预测1(即只是预测下一个值)。
为什么我不能一次用多个批次训练和拟合模型,然后使用该模型预测除相同批次大小之外的任何内容。这似乎没有意义,但我很容易错过一些关于此的内容。
编辑:这是模型。 batch_size为50,sl为序列长度,目前设置为20。
model = Sequential()
model.add(LSTM(1, batch_input_shape=(batch_size, 1, sl), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
这是用于预测 RMSE 训练集的行
# make predictions
trainPredict = model.predict(trainX, batch_size=batch_size)
这是看不见的时间步长的实际预测
for i in range(test_len):
print('Prediction %s: ' % str(pred_count))
next_pred_res = np.reshape(next_pred, (next_pred.shape[1], 1, next_pred.shape[0]))
# make predictions
forecastPredict = model.predict(next_pred_res, batch_size=1)
forecastPredictInv = scaler.inverse_transform(forecastPredict)
forecasts.append(forecastPredictInv)
next_pred = next_pred[1:]
next_pred = np.concatenate([next_pred, forecastPredict])
pred_count += 1
此问题与以下行有关:
forecastPredict = model.predict(next_pred_res, batch_size=batch_size)
这里batch_size设置为1时的错误是:
ValueError: Cannot feed value of shape (1, 1, 2) for Tensor 'lstm_1_input:0', which has shape '(10, 1, 2)' 与此处的 batch_size 设置为 50 时抛出的错误相同,就像其他批量大小一样。
总误差为:
forecastPredict = model.predict(next_pred_res, batch_size=1)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/models.py", line 899, in predict
return self.model.predict(x, batch_size=batch_size, verbose=verbose)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/engine/training.py", line 1573, in predict
batch_size=batch_size, verbose=verbose)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/engine/training.py", line 1203, in _predict_loop
batch_outs = f(ins_batch)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 2103, in __call__
feed_dict=feed_dict)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 767, in run
run_metadata_ptr)
File "/home/entelechy/tf_keras/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 944, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (1, 1, 2) for Tensor 'lstm_1_input:0', which has shape '(10, 1, 2)'
编辑:一旦我将模型设置为stateful=False,我就可以使用不同的批量大小进行拟合/训练和预测。这是什么原因?
【问题讨论】:
-
批量大小与您描述的不一样,请添加详细信息和代码。
-
添加错误及相关代码
-
如果您要传递大小为 1 的批次,请确保它仍然是一个与训练数组具有完全相同形状的数组,除了 50 变为 1。确保您没有丢失一维仅将 (50, 1, sl) 转换为 (1,sl)。应该保留 (1,1,sl)。
-
@Daniel 嘿,谢谢您的回复。是的,我已经通过它检查了正确的维度,据我所知,我认为这一切都很好。错误消息是 ValueError: Cannot feed value of shape (1, 1, 2) for Tensor 'lstm_1_input:0',其形状为 '(10, 1, 2)' 无论如何
-
我也遇到过类似的问题。但我发现这个链接:machinelearningmastery.com/… 真的很有帮助。救命....
标签: deep-learning keras lstm