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



在上一个问题中,我询问了如何使用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()

这是一个玩具的例子。我现在正在为一些时间序列数据构建 LSTM,我已经成功地将其与 MLP 一起使用。数据的类型为数据帧,因为它是通过熊猫制作的。每个观测值有 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,也会发生类似的错误(
这是数据帧的问题吗?(数据帧没有 .reshape(( 函数(

解决了。

数据
  1. 不应是数据帧

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

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

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

lstm_model.fit(data_shape_array, y_train)

我将在我的完整代码中尝试此操作,看看会发生什么。

最新更新