首頁 >後端開發 >Python教學 >Keras 中的有狀態 LSTM 與傳統 LSTM 有何不同?

Keras 中的有狀態 LSTM 與傳統 LSTM 有何不同?

Susan Sarandon
Susan Sarandon原創
2024-11-05 04:17:02413瀏覽

How do Stateful LSTMs in Keras differ from traditional LSTMs, and when should I use each type?

了解Keras 長短期記憶(LSTM)

重塑和狀態性

數據重塑:

重塑操作對於符合Keras 的LSTM 預期輸入格式是必要的,即[樣本、時間步長、特徵]。在這種情況下,樣本表示資料集中的序列數,時間步長表示每個序列的長度,特徵指每個時間步長的輸入變數的數量。透過重塑數據,您可以確保 LSTM 能夠正確處理序列資訊。

有狀態 LSTM:

有狀態 LSTM 在訓練期間跨多個批次保留其內部狀態。這使得它們能夠「記住」迄今為止所看到的序列資訊。在提供的範例中,batch_size 設定為 1,並且在訓練運行之間重置記憶體。這意味著 LSTM 沒有充分利用其有狀態功能。為了利用有狀態性,您通常會使用大於 1 的批次大小,並避免在批次之間重置狀態。這使得 LSTM 能夠學習跨多個序列的長期依賴關係。

時間步長和特徵

時間步長:

時間步數指示資料集中每個序列的長度。在您共享的圖像中,您正在考慮多對一的情況,其中可變長度序列被壓縮為單一輸出。粉紅色框的數量對應於輸入序列中的時間步數。

特徵:

特徵的數量是指每個特徵的輸入變數的數量時間步。在多變量序列中,例如同時對多個金融股票進行建模,每個時間步長都會有多個特徵,代表所預測的不同變數。

有狀態 LSTM 行為

在圖中,紅色框代表隱藏狀態,綠色框代表細胞狀態。雖然它們在視覺上是相同的,但它們在 LSTM 中是不同的元素。 LSTM 的有狀態行為意味著這些狀態會延續到後續的時間步和批次。然而,值得注意的是,範例中訓練運行之間的狀態重置會阻止真正的狀態性。

實作不同的LSTM 配置

單層多對多:

要使用單一LSTM 層實作多對多處理,請使用return_sequences= True。這可確保輸出形狀包含時間維度,從而允許每個序列有多個輸出。

單層多對一:

對於多對一處理,設定 return_sequences=False。這指示 LSTM 層僅輸出最後一個時間步,從而有效地丟棄先前的序列資訊。

具有重複向量的一對多:

建立在一對多配置中,您可以使用 RepeatVector 層將輸入複製到多個時間步長中。這允許您將單一觀察資料輸入 LSTM 層並獲得多個輸出。

使用狀態 LSTM 的一對多:

一種更複雜的實作方法一對一地使用 stateful=True。透過手動迭代序列並將每個時間步驟的輸出作為下一個時間步驟的輸入,您可以透過僅輸入一個步驟來產生一系列輸出。這通常用於序列生成任務。

複雜配置:

LSTM 可以堆疊在各種配置中以創建複雜的架構。例如,自動編碼器可以將多對一編碼器與一對多解碼器結合起來,使模型能夠學習序列的編碼和解碼。

以上是Keras 中的有狀態 LSTM 與傳統 LSTM 有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn