Tensorflow進行時間序列分析

2021-09-13 14:53:42 字數 3176 閱讀 7691

摘要:2023年深度學習框架關注度排名tensorflow以絕對的優勢占領榜首,本文通過使用tensorflow優化過去乙個使用特徵提取方法的框架,證實了深度學習的優秀效能。
時間序列分析是一種動態資料處理的統計方法。根據對系統進行觀測得到的時間序列資料,用曲線擬合的方法對系統進行客觀的描述。

如今,時間序列資料出現在金融,訊號處理,語音識別和醫學等諸多領域。解決時間序列問題的標準方法通常需要手動提煉資料特徵,然後才能將其輸入到機器學習演算法中。這通常還要求開發設計人員掌握資料所屬學科領域的知識特徵,以便在演算法中加入特徵過濾。例如,如果處理訊號(即eeg訊號的分類),則需要掌握的知識特徵涉及各種頻帶的功率譜及hjorth引數。對於認真鑽研本領域的程式猿來說,這簡直就是噩夢。

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

其實答案不然,在影象分類領域也出現了類似的情況。但是,隨著深度學習的出現,卷積神經網路(cnn)的效能已經可以勝過這種人工提取特徵的方法。cnn不需要任何手動設定任何的影象特徵。在訓練過程中,隨著層次越來越深,cnn越來越複雜,進而它自己會學習得到許多「過濾器」,並在最終的分類器中使用它們。

在這篇部落格文章中,我將討論使用深度學習的方法對時間序列資料進行分類,而無需手動設計特徵。我在本文中將使用到的例子是uci儲存庫中經典的人類活動識別(har)資料集。該資料集包含原始時間序列資料,以及具有561個預處理資料的工程特徵。在部落格中我會比較使用工程特徵與深度學習這兩種方法(卷積和復現神經網路),並表明深度學習可以超越前者的效能。

在本文中我將使用tensorflow來實現和訓練部落格中所用到的模型。在下面的討論中,提供了**片段來解釋實現過程。有關完整的**,請參閱我的github資源庫。

第一步是將資料投射到具有一定形狀的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。

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

inputs是將輸入的張量饋送到計算圖,並將其陣列第乙個位置設定為none,以便允許可變的批量大小。labels_是要**的乙個熱編碼的標籤,keep_prob的作用是在退出正則化中保持概率來防止過度擬合,並且learning_rate_是adam優化器中使用的學習率。

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

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

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

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

從最大概率以及精度**類標籤。

功能實現**如下:

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

lstm在處理基於文字的資料方面非常受歡迎,在情感分析,語言翻譯和文字生成方面也相當成功。今天我們就用lstm來解決我們今天的問題。

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

為了將資料傳送到網路中,我們需要將陣列分成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,我們只需要將資料提供給圖表進行訓練。lstm_size=27,lstm_layers=2,batch_size=600,learning_rate=0.0005,和keep_prob=0.5,我獲得95%的準確度的測試集。這比cnn的結果還差,但還是不錯的。這些超引數的更好選擇會改進的結果。

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

Linux進行時間同步

時間同步 1 date s 2 配置時間伺服器,集群的其他機器都跟namenode所在機器同步時間 ntp伺服器 network time protocol ntp 是用來使計算機時間同步化的一種協議 檢查ntp是否安裝,如果未安裝,則安裝 伺服器上需要安裝ntp服務 同步機器上只需要安裝ntpda...

使用rdate進行時間同步

檢查伺服器時間,發現伺服器時間與當前時間錯了很多。於是調整。使用ntpdate 不管如何設定,包括關閉防火期,設定ntp.conf,結果都不成功。隨即使用網上提供的另外一種方法,臨時先解決一下燃眉之急。使用linux的rdate命令 rdate 通過網路獲取時間。主要引數兩個 p 列印出遠端伺服器的...

linux中進行時間同步

在搭建分布式平台的時候,由於機器長時間執行,主從節點之間的時間會有誤差,這樣集群便會出現問題,所以就需要在搭建的集群之前將準備工作做好,這其中就包括配置linux中的時間同步。本次採用的是contest 6.5環境。部署在vmware虛擬機器上。多台虛擬機器進行時間同步的時候需要在hosts檔案中配...