天天看點

如何使用最流行架構Tensorflow進行時間序列分析——第二篇

<a href="https://yq.aliyun.com/articles/118726" target="_blank">看深度學習架構排名第一的TensorFlow如何進行時序預測——第一篇</a>

時間序列分析是一種動态資料處理的統計方法。根據對系統進行觀測得到的時間序列資料,用曲線拟合的方法對系統進行客觀的描述。

那麼是不是不掌握這些學科領域的知識特征,我們就沒有辦法進行模型設計了呢?

其實答案不然,在圖像分類領域也出現了類似的情況。但是,随着深度學習的出現,卷積神經網絡(CNN)的性能已經可以勝過這種人工提取特征的方法。CNN不需要任何手動設定任何的圖像特征。在訓練過程中,随着層次越來越深,CNN越來越複雜,進而它自己會學習得到許多“過濾器”,并在最終的分類器中使用它們。

<b>卷積神經網絡(</b><b>CNN</b><b>)</b>

第一步是将資料投射到具有一定形狀的numpy數組中:(batch_size, seq_len, n_channels),其中batch_size是訓練期間批次中的示例數,seq_len是時間序列的長度(在我們的情況下n_channels為128),并且是進行測量的通道的數量。在本文的小例子中,有9個通道,每3個坐标軸包括3個不同的加速度測量。每次觀察有6類活動LAYING, STANDING, SITTING, WALKING_DOWNSTAIRS, WALKING_UPSTAIRS, WALKING。

首先,我們為輸入到計算圖的資料建立占位符:

我們将通過使用移動序列的一維核心構造卷積層(與使用2d卷積的圖像不同)來構造卷積層,這些核心作為在訓練過程中的過濾器。像許多CNN架構一樣,層越深,過濾器數越多。每個卷積之後是彙集層,以此減少序列長度。下面是可能可以使用的CNN架構的簡單圖檔:

如何使用最流行架構Tensorflow進行時間序列分析——第二篇

上面描述的卷積層如下實作:

一旦達到最後一層,我們需要張量平坦化并将其輸送到具有正确數量的神經元的分類器中(上圖中的144個)。模型功能:

1.    計算softmax交叉熵,這是多類問題中使用的标準損失度量。

2.    從最大機率以及精度預測類标簽。

功能實作代碼如下:

其餘的實施部分涉及向圖表饋送批次的訓練資料并評估驗證集的性能。最後,對測試集進行評估。采用上述架構<code>batch_size=</code>600,<code>learning_rate</code> =0.001(預設值),<code>keep_prob=</code> 0.5,500訓練次數,我們得到98%的測試精度。下面的圖表顯示了訓練/驗證精度如何通過訓練次數演變:

如何使用最流行架構Tensorflow進行時間序列分析——第二篇

以下是可以在我們的問題中使用的示例架構:

如何使用最流行架構Tensorflow進行時間序列分析——第二篇

為了将資料傳送到網絡中,我們需要将數組分成128個,每個的形狀我們定義為:(batch_size, n_channels)。然後,單層神經元将把這些輸入轉換成LSTM細胞,每一個都具有次元lstm_size。該參數的大小選擇要大于通道數。這是一種類似于在文本應用程式中嵌入圖層的方式。為了實作,占位符與上述相同。以下代碼段實作了LSTM層:

上面的代碼段中有一個重要的技術細節。我将陣列重新整形(batch_size, seq_len, n_channels)到(seq_len, batch_size, n_channels),這樣tf.split就可以在每個步驟中将資料(由第零個索引)正确地分割成數組清單。其餘的是LSTM實作的标準,包括建構層(包括正則化的退出),然後是定義初始狀态。

下一步是通過網絡實作前向傳遞和成本函數。一個重要的技術方面利用梯度剪輯,因為它通過防止反向傳播期間的爆炸梯度來改善訓練。

請注意,僅使用LSTM輸出頂部序列的最後一個成員,因為我們正在嘗試每個序列預測一個數字。其餘的類似CNN,我們隻需要将資料提供給圖表進行訓練。<code>lstm_size=27</code>,<code>lstm_layers=2</code>,<code>batch_size=600</code>,<code>learning_rate=0.0005</code>,和<code>keep_prob=0.5</code>,我獲得95%的準确度的測試集。這比CNN的結果還差,但還是不錯的。這些超參數的更好選擇會改進的結果。

在這篇部落格文章中,我已經說明了如何使用CNN和LSTM進行時間序列分類,并證明深層架構可以勝過預先設計的功能特征訓練的模型。除了達到更好的準确性外,深度學習模式還“培養”了自己的功能。這是非常可取的,因為人們不需要具有來自資料來源的領域專長,能夠訓練準确的模型。

文章原标題《time-series-classification-with-tensorflow》,

譯者:袁虎 審閱:主題曲

繼續閱讀