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

Python 如何正确指定Keras LSTM模型的输入形状,python,keras,generator,lstm,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(): 我的型号代码如下 def lstm_model(): m

我有一个生成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():

我的型号代码如下

   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处理非预处理数据的例子,任何建议都非常感谢!谢谢。

您的数据必须是使用格式(x,y,z)的元组,其中=>x是您的批次号(您可以从1开始),y是您的数据数组,z是您的数据形状。 根据您的案例,我可以推断您的数据有一个特征,有三个步骤。因此,您可以使用以下代码进行准备:

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

如果无法直接更改数据,可以将其合并到新数组中,然后将该数组放入模型中

可以发布与数据管道相关的代码吗?当然可以。抱歉,我想我的代码不清楚,我的train_gen返回一个X,Y元组的形式:([0.0,1.0,0.0004],0.25)。所以有3个功能,1个步骤。这意味着我应该重新调整为(1,1,3)?但请记住它不能正常工作,因为您只有一个单元格/时间步(在LSTM中,每个时间步都作为一个单元格工作,这是您首先要利用的),为什么它不能正常工作?我的回望窗口是100个周期,但我一次只喂1批。它们不应该相关?你没有充分发挥LSTM的潜力,事实上,你使用它的方式(每批一个时间步)使你的RNN像ANN一样工作(LSTM从时间步之间的连接中获益)。您可以在这里了解更多信息:您使用时间步来显示信息每次是如何演变的,您至少需要两个信息单元(两个时间步)来利用它
data = data.reshape((1, 3, 1))