如何为Keras LSTM模型正确指定输入形状

时间:2019-09-12 20:36:42

标签: python keras generator lstm

我有一个生成x和y的生成器,这就是我在Keras中训练LSMT模型所使用的生成器。

X的格式为[0.0,1.0,0.0004]。

我之前设置了此数据的形状:

x_out = np.array(list(x_drop.values())).reshape(len(x_drop), 1)
y_out = np.array([y])

我进入了异步生成器,因此我进入了一个同步函数,然后使用model.fit_generator():

train_gen = to_sync_generator(replay(traintime_0, traintime_1, test=0))
    model = lstm_model()

model.fit_generator(
    train_gen,
    epochs = 5,
    verbose = 1,
    steps_per_epoch=500,
    initial_epoch=0,
    validation_data=valid_gen,
    validation_steps=500)

下面是我的模型代码。

   def lstm_model():
       model = Sequential()
       model.add(LSTM(100, input_shape=(3,1)))
       model.add(Dense(1))
       model.compile(loss='mean_squared_error', optimizer='adam')
       return model

我收到以下错误:

ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (3, 1)

请注意,我无法对此数据进行预处理。

我还没有真正看到将lstm与非预处理数据一起使用的示例,非常感谢任何建议!谢谢。

1 个答案:

答案 0 :(得分:0)

您的数据必须是使用(x,y,z)格式的元组,其中=> x是您的批号(您最初可以从1开始),y是您的数据数组,z是您的数据形状。 根据您的情况,我可以推断出您的数据具有一项功能并包含3个步骤。因此,您可以使用以下代码进行准备:

data = data.reshape((1, 3, 1))

如果您不能直接更改数据,则可以将其合并到新数组中,然后将其放入模型中