原文鏈接:http://tecdat.cn/?p=19751
本示例說明如何使用長短期記憶(LSTM)網絡對序列數據進行分類。
要訓練深度神經網絡對序列數據進行分類,可以使用LSTM網絡。LSTM網絡使您可以將序列數據輸入網絡,並根據序列數據的各個時間步進行預測。
本示例使用日語元音數據集。此示例訓練LSTM網絡來識別給定時間序列數據的說話者,該時間序列數據表示連續講話的兩個日語元音。訓練數據包含九位發言人的時間序列數據。每個序列具有12個特征,並且長度不同。數據集包含270個訓練觀察和370個測試觀察。
加載序列數據
加載日語元音訓練數據。 XTrain
是包含長度可變的維度12的270個序列的單元陣列。 Y
是標簽“ 1”,“ 2”,...,“ 9”的分類向量,分別對應於九個揚聲器。中的條目 XTrain
是具有12行(每個要素一行)和不同列數(每個時間步長一列)的矩陣。
-
XTrain( 1:5)
-
ans= 5×1 cell array
-
{ 12x20 double}
-
{ 12x26 double}
-
{ 12x22 double}
-
{ 12x20 double}
-
{ 12x21 double}
可視化圖中的第一個時間序列。每行對應一個特征。
-
figure
-
plot( Train')
-
xlabel( "時間步長")
-
title( "訓練樣本 1")
-
numFeatures = size( XTrain{1},1);
-
legend( "特征 "
准備填充數據
在訓練過程中,默認情況下,該軟件默認將訓練數據分成小批並填充序列,以使它們具有相同的長度。太多的填充可能會對網絡性能產生負面影響。
為防止訓練過程增加太多填充,您可以按序列長度對訓練數據進行排序,並選擇小批量的大小,以使小批量中的序列具有相似的長度。下圖顯示了對數據進行排序之前和之后的填充序列的效果。
獲取每個觀察的序列長度。
按序列長度對數據進行排序。
在條形圖中查看排序的序列長度。
-
figure
-
bar( sequenceLengths)
-
ylim([ 0 30])
-
xlabel( "序列")
-
ylabel( "長度")
-
title( "排序后數據")
選擇大小為27的小批量可均勻划分訓練數據並減少小批量中的數量。下圖說明了添加到序列中的填充量。
定義LSTM網絡架構
定義LSTM網絡體系結構。將輸入大小指定為大小為12的序列(輸入數據的大小)。指定具有100個隱藏單元的雙向LSTM層,並輸出序列的最后一個元素。最后,通過包括大小為9的完全連接層,其后是softmax層和分類層,來指定九個類。
如果可以在預測時使用完整序列,則可以在網絡中使用雙向LSTM層。雙向LSTM層在每個時間步都從完整序列中學習。例如,如果您無法在預測時使用整個序列,比如一次預測一個時間步長時,請改用LSTM層。
-
-
layers =
-
5x1 Layer array with layers:
-
-
1 '' Sequence Input Sequence input with 12 dimensions
-
2 '' BiLSTM BiLSTM with 100 hidden units
-
3 '' Fully Connected 9 fully connected layer
-
4 '' Softmax softmax
-
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”的分類向量,分別對應於九個揚聲器。
-
XTest( 1:3)
-
ans= 3×1 cell array
-
{ 12x19 double}
-
{ 12x17 double}
-
{ 12x19 double}
LSTM網絡 net
是使用相似長度的序列進行訓練的。確保測試數據的組織方式相同。按序列長度對測試數據進行排序。
分類測試數據。要減少分類過程引入的數據量,請將批量大小設置為27。要應用與訓練數據相同的填充,請將序列長度指定為 'longest'
。
計算預測的分類准確性。
-
acc = sum(YPred == YTest)./numel(YTest)
-
acc = 0.9730
最受歡迎的見解
1.用於NLP的Python:使用Keras的多標簽文本LSTM神經網絡分類
2.Python中利用長短期記憶模型LSTM進行時間序列預測分析 – 預測電力消耗數據
4.Python中用PyTorch機器學習分類預測銀行客戶流失模型
6.在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析
7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用於預測時間序列數