<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 5學習LSTM循環神經網絡的簡單序列預測問題的例子 > 原文: [https://machinelearningmastery.com/sequence-prediction-problems-learning-lstm-recurrent-neural-networks/](https://machinelearningmastery.com/sequence-prediction-problems-learning-lstm-recurrent-neural-networks/) 序列預測不同于傳統的分類和回歸問題。 它要求您考慮觀察的順序,并使用具有記憶的長短期記憶(LSTM)循環神經網絡等模型,并且可以學習觀察之間的任何時間依賴性。 應用LSTM來學習如何在序列預測問題上使用它們是至關重要的,為此,您需要一套明確定義的問題,使您能夠專注于不同的問題類型和框架。至關重要的是,您可以建立您對序列預測問題如何不同的直覺,以及如何使用像LSTM這樣復雜的模型來解決它們。 在本教程中,您將發現一套5個狹義定義和可擴展的序列預測問題,您可以使用這些問題來應用和了解有關LSTM循環神經網絡的更多信息。 完成本教程后,您將了解: * 簡單的記憶任務,用于測試LSTM的學習記憶能力。 * 簡單的回聲任務,用于測試LSTM的學習時間依賴表現力。 * 用于測試LSTM解釋能力的簡單算術任務。 讓我們開始吧。 ![5 Examples of Simple Sequence Prediction Problems for Learning LSTM Recurrent Neural Networks](img/b45c5a73c43228fa44ebdd42dcf41db3.jpg) 5用于學習LSTM循環神經網絡的簡單序列預測問題示例 照片由 [Geraint Otis Warlow](https://www.flickr.com/photos/gpwarlow/850611221/) ,保留一些權利。 ## 教程概述 本教程分為5個部分;他們是: 1. 序列學習問題 2. 價值記憶 3. 回聲隨機整數 4. 回聲隨機子序列 5. 序列分類 ## 問題的屬性 序列問題的設計考慮了一些屬性: * **縮小**。集中于序列預測的一個方面,例如記憶或函數近似。 * **可擴展**。在選擇的狹隘焦點上或多或少地變得困難。 * **重新定型**。提出每個問題的兩個或更多個框架以支持不同算法學習能力的探索。 我試圖提供狹隘的焦點,問題困難和所需的網絡架構。 如果您有進一步擴展的想法或類似的精心設計的問題,請在下面的評論中告訴我。 ## 1.序列學習問題 在該問題中,生成0.0和1.0之間的連續實數值序列。給定過去值的一個或多個時間步長,模型必須預測序列中的下一個項目。 我們可以直接生成這個序列,如下所示: ```py from numpy import array # generate a sequence of real values between 0 and 1. def generate_sequence(length=10): return array([i/float(length) for i in range(length)]) print(generate_sequence()) ``` 運行此示例將打印生成的序列: ```py [ 0\. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] ``` 這可以被視為記憶挑戰,如果在前一時間步驟觀察,模型必須預測下一個值: ```py X (samples), y 0.0, 0.1 0.1, 0.2 0.2, 0.3 ... ``` 網絡可以記住輸入 - 輸出對,這很無聊,但會展示網絡的功能近似能力。 該問題可以被構造為隨機選擇的連續子序列作為輸入時間步驟和序列中的下一個值作為輸出。 ```py X (timesteps), y 0.4, 0.5, 0.6, 0.7 0.0, 0.2, 0.3, 0.4 0.3, 0.4, 0.5, 0.6 ... ``` 這將要求網絡學習向最后看到的觀察添加固定值或記住所生成問題的所有可能子序列。 該問題的框架將被建模為多對一序列預測問題。 這是測試序列學習的原始特征的簡單問題。這個問題可以通過多層感知器網絡來解決。 ## 2.價值記憶 問題是要記住序列中的第一個值,并在序列的末尾重復它。 該問題基于用于在1997年論文[長期短期記憶](http://www.bioinf.jku.at/publications/older/2604.pdf)中證明LSTM的“實驗2”。 這可以被視為一步預測問題。 給定序列中的一個值,模型必須預測序列中的下一個值。例如,給定值“0”作為輸入,模型必須預測值“1”。 考慮以下兩個5個整數的序列: ```py 3, 0, 1, 2, 3 4, 0, 1, 2, 4 ``` Python代碼將生成兩個任意長度的序列。如果您愿意,可以進一步概括。 ```py def generate_sequence(length=5): return [i for i in range(length)] # sequence 1 seq1 = generate_sequence() seq1[0] = seq1[-1] = seq1[-2] print(seq1) # sequence 2 seq1 = generate_sequence() seq1[0] = seq1[-1] print(seq1) ``` 運行該示例生成并打印上述兩個序列。 ```py [3, 1, 2, 3, 3] [4, 1, 2, 3, 4] ``` 可以對整數進行歸一化,或者更優選地對一個熱編碼進行歸一化。 這些模式引入了皺紋,因為兩個序列之間存在沖突的信息,并且模型必須知道每個一步預測的上下文(例如,它當前正在預測的序列),以便正確地預測每個完整序列。 我們可以看到序列的第一個值重復作為序列的最后一個值。這是指示器為模型提供關于它正在處理的序列的上下文。 沖突是從每個序列中的第二個項目到最后一個項目的過渡。在序列1中,給出“2”作為輸入并且必須預測“3”,而在序列2中,給出“2”作為輸入并且必須預測“4”。 ```py Sequence 1: X (samples), y ... 1, 2 2, 3 Sequence 2: X (samples), y ... 1, 2 2, 4 ``` 這種皺紋對于防止模型記憶每個序列中的每個單步輸入 - 輸出值對非常重要,因為序列未知模型可能傾向于這樣做。 該成幀將被建模為一對一的序列預測問題。 這是多層感知器和其他非循環神經網絡無法學習的問題。必須記住多個樣本中序列中的第一個值。 這個問題可以被定義為提供除最后一個值之外的整個序列作為輸入時間步長并預測最終值。 ```py X (timesteps), y 3, 0, 1, 2, 3 4, 0, 1, 2, 4 ``` 每個時間步仍然一次顯示給網絡,但網絡必須記住第一個時間步的值。不同的是,網絡可以通過時間反向傳播更好地了解序列之間和長序列之間的差異。 This framing of the problem would be modeled as a many-to-one sequence prediction problem. 同樣,多層感知器無法學習這個問題。 ## 3.回聲隨機整數 在這個問題中,生成隨機的整數序列。模型必須記住特定滯后時間的整數,并在序列結束時回顯它。 例如,10個整數的隨機序列可以是: ```py 5, 3, 2, 1, 9, 9, 2, 7, 1, 6 ``` 該問題可能被設置為在第5個時間步驟回顯該值,在這種情況下為9。 下面的代碼將生成隨機的整數序列。 ```py from random import randint # generate a sequence of random numbers in [0, 99] def generate_sequence(length=10): return [randint(0, 99) for _ in range(length)] print(generate_sequence()) ``` 運行該示例將生成并打印隨機序列,例如: ```py [47, 69, 76, 9, 71, 87, 8, 16, 32, 81] ``` 可以對整數進行歸一化,但更優選地,可以使用一個熱編碼。 該問題的簡單框架是回顯當前輸入值。 ```py yhat(t) = f(X(t)) ``` 例如: ```py X (timesteps), y 5, 3, 2, 1, 9, 9 ``` 這個微不足道的問題可以通過多層感知器輕松解決,并可用于測試線束的校準或診斷。 更具挑戰性的問題框架是回顯前一時間步的值。 ```py yhat(t) = f(X(t-1)) ``` For example: ```py X (timesteps), y 5, 3, 2, 1, 9, 1 ``` 這是多層感知器無法解決的問題。 echo的索引可以進一步推遲,從而對LSTM內存產生更多需求。 與上面的“值記憶”問題不同,每個訓練時期都會產生一個新的序列。這將要求模型學習泛化回聲解,而不是記憶特定序列或隨機數序列。 在這兩種情況下,問題都將被建模為多對一序列預測問題。 ## 4.回聲隨機子序列 該問題還涉及生成隨機的整數序列。 這個問題要求模型記住并輸出輸入序列的部分子序列,而不是像前一個問題那樣回顯單個前一個時間步驟。 最簡單的框架將是前一節中的回聲問題。相反,我們將專注于序列輸出,其中最簡單的框架是模型記住并輸出整個輸入序列。 For example: ```py X (timesteps), y 5, 3, 2, 4, 1, 5, 3, 2, 4, 1 ``` 這可以被建模為多對一序列預測問題,其中輸出序列直接在輸入序列中的最后一個值的末尾輸出。 這也可以被建模為網絡為每個輸入時間步長輸出一個值,例如,一對一的模式。 更具挑戰性的框架是輸出輸入序列的部分連續子序列。 For example: ```py X (timesteps), y 5, 3, 2, 4, 1, 5, 3, 2 ``` 這更具挑戰性,因為輸入數量與輸出數量不匹配。這個問題的多對多模型需要更高級的架構,例如編碼器 - 解碼器LSTM。 同樣,一個熱編碼將是優選的,盡管該問題可以被建模為標準化整數值。 ## 5.序列分類 該問題被定義為0和1之間的隨機值序列。該序列被作為問題的輸入,每個時間步提供一個數字。 二進制標簽(0或1)與每個輸入相關聯。輸出值均為0.一旦序列中輸入值的累積和超過閾值,則輸出值從0翻轉為1。 使用序列長度的1/4的閾值。 例如,下面是10個輸入時間步長(X)的序列: ```py 0.63144003 0.29414551 0.91587952 0.95189228 0.32195638 0.60742236 0.83895793 0.18023048 0.84762691 0.29165514 ``` 相應的分類輸出(y)將是: ```py 0 0 0 1 1 1 1 1 1 1 ``` 我們可以用Python實現它。 ```py from random import random from numpy import array from numpy import cumsum # create a sequence classification instance def get_sequence(n_timesteps): # create a sequence of random numbers in [0,1] X = array([random() for _ in range(n_timesteps)]) # calculate cut-off value to change class values limit = n_timesteps/4.0 # determine the class outcome for each item in cumulative sequence y = array([0 if x < limit else 1 for x in cumsum(X)]) return X, y X, y = get_sequence(10) print(X) print(y) ``` 運行該示例會生成隨機輸入序列,并計算二進制值的相應輸出序列。 ```py [ 0.31102339 0.66591885 0.7211718 0.78159441 0.50496384 0.56941485 0.60775583 0.36833139 0.180908 0.80614878] [0 0 0 0 1 1 1 1 1 1] ``` 這是一個序列分類問題,可以建模為一對一。狀態需要解釋過去的時間步驟,以正確預測輸出序列何時從0翻轉到1。 ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [長期短期記憶](http://www.bioinf.jku.at/publications/older/2604.pdf),1997年 * [如何使用Keras](http://machinelearningmastery.com/use-different-batch-sizes-training-predicting-python-keras/) 在Python中使用不同的批量大小進行訓練和預測 * [用Python中的長短期內存網絡演示內存](http://machinelearningmastery.com/memory-in-a-long-short-term-memory-network/) * [如何通過長短期記憶循環神經網絡學習回聲隨機整數](http://machinelearningmastery.com/learn-echo-random-integers-long-short-term-memory-recurrent-neural-networks/) * [如何將編碼器 - 解碼器LSTM用于隨機整數的回波序列](http://machinelearningmastery.com/learn-echo-random-integers-long-short-term-memory-recurrent-neural-networks/) * [如何使用Keras開發用于Python序列分類的雙向LSTM](http://machinelearningmastery.com/develop-bidirectional-lstm-sequence-classification-python-keras/) ## 摘要 在本教程中,您發現了一套精心設計的人工序列預測問題,可用于探索LSTM循環神經網絡的學習和記憶功能。 具體來說,你學到了: * 簡單的記憶任務,用于測試LSTM的學習記憶能力。 * 簡單的回聲任務,用于測試LSTM的學習時間依賴表現力。 * 用于測試LSTM解釋能力的簡單算術任務。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看