LSTM一次预测一个结果

时间:2020-03-20 23:29:24

标签: python tensorflow lstm

我试图根据我的LSTM模型来预测单个结果

我的模型有n_features = 32time_step = 100,其代码如下

  model = tf.keras.Sequential([
  tf.keras.layers.InputLayer( input_shape=(time_step , n_features)), 
  tf.keras.layers.LSTM(64),
  tf.keras.layers.Dense(1)]
)

我使用生成器训练了模型

generator = TimeseriesGenerator(x_feature,y_target,length=time_step ,batch_size = 128)

当我尝试使用形状为(2,32)的测试数据集来预测模型时,该数据集具有2行和32个特征。

(我打算从我的模型中获得2个预测)

我遇到以下错误

ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. 
Full shape received: [None, 32]

我理解这一点是因为我的测试数据集的形状为[None,32],但是我该如何重塑形状,使其变成(100,32)的形状

我尝试使用

进行重塑
x_feature.reshape(-1,100,36)
model.predict(x_feature)

无论如何显示

ValueError: cannot reshape array of size 64 into shape (100,36)

当模型的输入形状为100,36但测试数据集的形状为2,36时,如何解决此类重塑问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

Keras模型在inputs层的情况下始终希望(batch_size, time_steps, n_features)具有形状LSTM。训练时它之所以有效,是因为您训练了多个示例,即以固定的批次大小进行训练。但是,当您预测并使用一个示例时,您添加一个批处理维度才能使其正常工作。假设您的单个示例x的形状为(time_steps,n_features),则应使用:

x = numpy.expand_dims(x, 0)

会将您的x转换为(1, time_steps, n_features)的形状,并且该模型将像输入的批量大小为 1 一样工作。现在,如果您致电

output = model.predict(x)

您的输出将是一个包含一个元素的列表。因此output[0]将是您原始 x 的预测。

您提到的错误是由于未添加批次尺寸引起的,因此该模型抱怨该模型使用ndim = 2而不是3来获得输入。以上建议的修改将解决该错误,但是仍然无法使用对于您要解决的问题,因为您正在使用100的time_steps和32的特征训练模型。因此,只有在您的测试示例具有多个时间步长的情况下,该模型才有效。