0

我有一個使用3個傳感器進行活動識別的CNN。我堆疊傳感器的尺寸給我9個通道,並將時間序列數據分成每個窗口200個樣本。我給它喂2個CNN層,1個完全連接層和1個softmax層。 All in TensorflowRNN和CNN在Tensorflow中的活動識別

現在我想用LSTM圖層替換完全連接的圖層。但我不知道如何實施它。如果我的最後一個卷積層有平坦的輸出,我怎麼把它送入LSTM層?我如何申請退學?

因爲只見LSTM來回活動識別一個Github的代碼且輸入是

x = tf.placeholder(tf.float32, [None, n_steps, n_input]) 
y = tf.placeholder(tf.float32, [None, n_classes]) 

但是從最後層我的平坦化輸出是僅2D(-1,N)。 n_steps是時間步數的數量吧?我應該重塑我的扁平輸出嗎?我應該如何重塑它?我相信來自Github的LSTM代碼中的n_steps指的是每個窗口的樣本數量。那麼我應該再次將展平輸出分成每個窗口200個樣本嗎?

編輯: 我想要做的是將時間序列數據分成切片或時間窗口,然後應用卷積層,然後將其平坦化並將其輸入到LSTM層。但我不知道如何實現這一點。特別是當我已經在平坦的輸出。我將如何對它進行分割並將其提供給復發層?

回答

2

LSTMs是與序列數據一起使用的架構。在時間維度上使用卷積會使您失去這個時間維度,使得使用LSTM的意義變得更小。

我個人的做法是用LSTM替換CNN層,因爲兩者都用於在時間維度上進行一些證據的彙總。在這種情況下,我認爲您的問題的答案很明確:n_steps是數據的時間步驟。

如果你仍然想在卷積上應用LSTM,那麼你應該設計某種更高層次的序列。一種可能是爲卷積層提供不同的窗口,然後使用它們的輸出作爲LSTM的輸入序列。顯然,這只是一個「竅門」,你應該找到這樣做的好動機。

+0

我想要做的是將時間序列數據分成切片或時間窗口,然後應用卷積層,然後將其平鋪並輸入到LSTM層。但我不知道如何實現這一點。特別是當我已經在平坦的輸出。我將如何對它進行分割並將其提供給復發層? – Chaine

+0

就像您直接使用LSTM一樣,您會將LSTM應用於這些時間窗口。但是,一旦我將CNN應用於時間窗口,我會將其扁平化。問題是,我需要再次對其進行細分。與我分割我的原始時間窗口一樣?但CNN已經做了maxpooling和其他操作,所以這是一個全新的數據。 – Chaine

+0

正如我試圖在答案中所說的那樣,可以爲卷積層提供第一個不同的窗口(假設w0,w1,w2),然後考慮它們的輸出(o0,o1,o2)您的lstm的輸入。實際上,您需要使用具有共享參數的不同卷積網。 –