我试图根据我的LSTM
模型来预测单个结果
我的模型有n_features = 32
和time_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
时,如何解决此类重塑问题?
谢谢!
答案 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的特征训练模型。因此,只有在您的测试示例具有多个时间步长的情况下,该模型才有效。