2017-07-07 65 views
2

我正在玩机器学习,并试图跟随一些例子,但我坚持试图让我的数据进入Keras LSTM层。Keras LSTM Shape for Pandas DataFrame

我在Pandas DataFrame中有一些股票行情数据,它以15分钟的时间间隔对ohlc进行重新采样,并为每行加载其他指标。

我的代码如下。 DF是我的数据框:

x = df.iloc[:, :-1].values 
y = df.iloc[:, -1:].values 

dimof_input = x.shape[1] 
dimof_output = len(set(y.flat)) 

model = Sequential() 
model.add(LSTM(4, input_dim=dimof_input, return_sequences=True)) 
model.compile(loss='mse', optimizer='rmsprop') 

model.fit(x, y, nb_epoch=1, batch_size=1, verbose=2) 

当我尝试和适应,我得到:

Error when checking input: expected lstm_16_input to have 3 dimensions, 
but got array with shape (33, 100) 

我从其他地方的例子复制本。我不太明白如何将正确的数据形状引入此模型。谁能帮忙?

谢谢加载。

+0

你真的想用LSTM实现什么? – DarkCygnus

+0

我正在关注股票价格预测的一些教程。虽然不是什么严肃的事情,但这只是一个问题。 – Ludo

+0

好的......也许它和你通过'x.shape [1]'得到的'dimof_input'有关......'x'的形状是什么?通常我只是没有索引的'x.shape' ... – DarkCygnus

回答

3

输入形状

具有形状(batch_size, timesteps, input_dim)三维张量,(可选的)2D张量与形状(batch_size, output_dim)。 (从there)。
而你指定的input_dim=dimof_input。模型期望3D张量作为输入,但得到2D。如果您提供正在实施的教程的参考资料,我可能会更多地说出问题的原因。
你可以尝试重塑你的输入数据如下:

x = x.reshape(x.shape[0], 1, x.shape[1]) 

此外,关于Keras LSTM层输入数据的输入数据的一些信息可以发现here

+0

谢谢!尝试你建议的重塑现在更改为: ValueError:检查输入时出错:期望lstm_17_input有形状(无,无,1),但有形状的阵列(33,1,100) 我想我一定是从根本上误解了这些输入形状的工作原理。 我现在已经设法丢失了我正在跟随的教程。让我试着找到它。谢谢你的帮助。 – Ludo