簡體   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