拓端數據tecdat|matlab使用長短期記憶(LSTM)神經網絡對序列數據進行分類


原文鏈接:http://tecdat.cn/?p=19751

 

本示例說明如何使用長短期記憶(LSTM)網絡對序列數據進行分類。

要訓​​練深度神經網絡對序列數據進行分類,可以使用LSTM網絡。LSTM網絡使您可以將序列數據輸入網絡,並根據序列數據的各個時間步進行預測。

本示例使用日語元音數據集。此示例訓練LSTM網絡來識別給定時間序列數據的說話者,該時間序列數據表示連續講話的兩個日語元音。訓練數據包含九位發言人的時間序列數據。每個序列具有12個特征,並且長度不同。數據集包含270個訓練觀察和370個測試觀察。

加載序列數據

加載日語元音訓練數據。 XTrain 是包含長度可變的維度12的270個序列的單元陣列。 Y 是標簽“ 1”,“ 2”,...,“ 9”的分類向量,分別對應於九個揚聲器。中的條目  XTrain 是具有12行(每個要素一行)和不同列數(每個時間步長一列)的矩陣。

  1.  
    XTrain( 1:5)
  2.  
    ans= 1 cell array
  3.  
    { 12x20 double}
  4.  
    { 12x26 double}
  5.  
    { 12x22 double}
  6.  
    { 12x20 double}
  7.  
    { 12x21 double}

可視化圖中的第一個時間序列。每行對應一個特征。

  1.  
    figure
  2.  
    plot( Train')
  3.  
    xlabel( "時間步長")
  4.  
    title( "訓練樣本 1")
  5.  
    numFeatures = size( XTrain{1},1);
  6.  
    legend( "特征 "

准備填充數據

在訓練過程中,默認情況下,該軟件默認將訓練數據分成小批並填充序列,以使它們具有相同的長度。太多的填充可能會對網絡性能產生負面影響。

為防止訓練過程增加太多填充,您可以按序列長度對訓練數據進行排序,並選擇小批量的大小,以使小批量中的序列具有相似的長度。下圖顯示了對數據進行排序之前和之后的填充序列的效果。

獲取每個觀察的序列長度。

按序列長度對數據進行排序。

在條形圖中查看排序的序列長度。

  1.  
    figure
  2.  
    bar( sequenceLengths)
  3.  
    ylim([ 0 30])
  4.  
    xlabel( "序列")
  5.  
    ylabel( "長度")
  6.  
    title( "排序后數據")

選擇大小為27的小批量可均勻划分訓練數據並減少小批量中的數量。下圖說明了添加到序列中的填充量。

定義LSTM網絡架構

定義LSTM網絡體系結構。將輸入大小指定為大小為12的序列(輸入數據的大小)。指定具有100個隱藏單元的雙向LSTM層,並輸出序列的最后一個元素。最后,通過包括大小為9的完全連接層,其后是softmax層和分類層,來指定九個類。

如果可以在預測時使用完整序列,則可以在網絡中使用雙向LSTM層。雙向LSTM層在每個時間步都從完整序列中學習。例如,如果您無法在預測時使用整個序列,比如一次預測一個時間步長時,請改用LSTM層。

  1.  
     
  2.  
    layers =
  3.  
    5x1 Layer array with layers:
  4.  
     
  5.  
    1 '' Sequence Input Sequence input with 12 dimensions
  6.  
    2 '' BiLSTM BiLSTM with 100 hidden units
  7.  
    3 '' Fully Connected 9 fully connected layer
  8.  
    4 '' Softmax softmax
  9.  
    5 '' Classification Output crossentropyex

現在,指定訓練選項。將優化器指定為  'adam',將梯度閾值指定為1,將最大歷元數指定為100。要減少小批量中的填充量,請選擇27的小批量大小。與最長序列的長度相同,請將序列長度指定為  'longest'。為確保數據仍按序列長度排序,請指定從不對數據進行隨機排序。

由於批處理的序列短,因此訓練更適合於CPU。指定  'ExecutionEnvironment' 為  'cpu'。要在GPU上進行訓練(如果有),請將設置  'ExecutionEnvironment' 為  'auto' (這是默認值)。

訓練LSTM網絡

使用指定的訓練選項來訓練LSTM網絡  trainNetwork

測試LSTM網絡

加載測試集並將序列分類為揚聲器。

加載日語元音測試數據。 XTest 是包含370個長度可變的維度12的序列的單元陣列。 YTest 是標簽“ 1”,“ 2”,...“ 9”的分類向量,分別對應於九個揚聲器。

  1.  
    XTest( 1:3)
  2.  
    ans= 1 cell array
  3.  
    { 12x19 double}
  4.  
    { 12x17 double}
  5.  
    { 12x19 double}

LSTM網絡  net 是使用相似長度的序列進行訓練的。確保測試數據的組織方式相同。按序列長度對測試數據進行排序。

分類測試數據。要減少分類過程引入的數據量,請將批量大小設置為27。要應用與訓練數據相同的填充,請將序列長度指定為  'longest'

計算預測的分類准確性。

  1.  
    acc = sum(YPred == YTest)./numel(YTest)
  2.  
    acc = 0.9730

最受歡迎的見解

1.用於NLP的Python:使用Keras的多標簽文本LSTM神經網絡分類

2.Python中利用長短期記憶模型LSTM進行時間序列預測分析 – 預測電力消耗數據

3.python在Keras中使用LSTM解決序列問題

4.Python中用PyTorch機器學習分類預測銀行客戶流失模型

5.R語言多元Copula GARCH 模型時間序列預測

6.在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析

7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用於預測時間序列數

8.R語言估計時變VAR模型時間序列的實證研究分析案例

9.用廣義加性模型GAM進行時間序列分析

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM