繁体   English   中英

LSTM 数据形状。 我需要帮助更改 LSTM 以读取我的 DataFrame(反之亦然)

[英]LSTM data shape. I need help changing the LSTM to read my DataFrame (or vice versa)

在上一个问题中,我询问了如何使用Sequential()构建具有适当参数计数的 LSTM。 LSTM 参数计数为4 * ([outputSize * inputSize] + outputSize^2 + outputSize)

outputSize 表示您是否将返回 1 个值或一个序列。 inputSize 是单个样本/记录/观察的长度

基于这个等式,我将以下 LSTM 设置为具有 28 个参数,如等式所示

m3 = Sequential()
m3.add(LSTM((1),batch_input_shape=(None,1,5)))
m3.summary()

这是一个玩具例子。 我现在正在为一些我已经成功用于 MLP 的时间序列数据构建 LSTM。 数据类型为 DataFrame,因为它是通过 Pandas 制作的。 每次观察有 9 个滞后。

>>> X_train[:5]
          Lag09     Lag08     Lag07  ...     Lag03     Lag02     Lag01
69200  0.450732  0.467834  0.462262  ...  0.471648  0.476497  0.460177
69140  0.467834  0.462262  0.455329  ...  0.476497  0.460177  0.471678
69080  0.462262  0.455329  0.456245  ...  0.460177  0.471678  0.476364
69020  0.455329  0.456245  0.472979  ...  0.471678  0.476364  0.467761
68960  0.456245  0.472979  0.471648  ...  0.476364  0.467761  0.471914

[5 rows x 9 columns]
>>> type(X_train)
<class 'pandas.core.frame.DataFrame'>

目标看起来像这样

>>> y_train[:5]
69200    0.471678
69140    0.476364
69080    0.467761
69020    0.471914
68960    0.484080
Name: Close, dtype: float64
>>> type(y_train)
<class 'pandas.core.series.Series'>

使用上面的指南,关于参数,我构建了一个这样的 LSTM

my = Sequential()
my.add(LSTM(20, batch_input_shape=(None,1,9), return_sequences=True))
my.add(LSTM(20, return_sequences=True))
my.add(LSTM(20, return_sequences=True))
my.add(LSTM(1))

None表示我没有指定观察次数

当我尝试通过它运行数据时,尺寸出现错误

model.fit(X_train, y_train,
                           validation_data=(X_validation,y_validation),
                           epochs=noepoch, verbose=0,
                           shuffle=False)

ValueError: Error when checking input: expected lstm_input to have 3 dimensions, 
but got array with shape (1212, 9)

我如何使用.fit()有问题吗?
为什么需要 3 个维度? (如果我删除None或反转 1,9 会发生类似的错误)
DataFrame 有问题吗? (数据框没有 a.reshape() 函数)

解决了。

  1. 数据不应该是 DataFrame

     data_as_array = np.array(dataframe_of_9_columns)
  2. 那个烦人的形状东西

    data_shape_array = data_as_array.reshape(len,1,9)

这成为新的 X_train。 我想 y_train 很好,因为 model 确实运行了。

lstm_model.fit(data_shape_array, y_train)

我将在我的完整代码中尝试这个,看看会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM