單層LSTM和多層LSTM的輸入與輸出

2021-10-07 00:14:24 字數 2972 閱讀 9470

rnn結構:

對應的**為:(**中沒寫偏置)

上圖是單層lstm的輸入輸出結構圖。其實它是由乙個lstm單元的乙個展開,如下圖所示:

所以從左到右的每個lstm block只是對應乙個時序中的不同的步。

在第乙個圖中,輸入的時序特徵有s個,長度記作:seq_len,每個特徵是乙個c維的向量,長度記作:input_size。而initial state是lstm的隱藏狀態和內部狀態的乙個輸入的初始化。分別記作:h0和c0。

輸出可以通過設定,來決定是輸出所有時序步的輸出,還是只輸出最後乙個時序步的輸出。final_state是隱藏狀態和內部狀態的輸出,記作:hn和cn.

那麼對於在pytorch中的函式lstm的引數的輸入情況如下:

輸入資料:

對於輸出,輸出的hidden_size的大小是由門控中的隱藏的神經元的個數來確定的。

輸出的格式:

這只是lstm單元的輸入輸出格式,真實的其後還要跟乙個全連線層,用於把lstm的輸出結果對映到自己想要的結果上,如分類:

如果只想要研究最後乙個時間步的輸出結果,只需在最後乙個時間步新增全連線即可。

對於多層的lstm,需要把第一層的每個時間步的輸出作為第二層的時間步的輸入,如上圖所示。

對於num_layers層lstm:

輸入資料:

輸出資料:

如果是雙向的,即在lstm()函式中,新增關鍵字bidirectional=true,則:

單向則num_direction=1,雙向則num_direction=2

輸入資料格式:

input(seq_len, batch, input_size)

h0(num_layers * num_directions, batch, hidden_size)

c0(num_layers * num_directions, batch, hidden_size)

輸出資料格式:

輸出的y=act(h_t*w_y)+b_y(圖中未顯示!)

可以看到中間的 cell 裡面有四個黃色小框,你如果理解了那個代表的含義一切就明白了,每乙個小黃框代表乙個前饋網路層,對,就是經典的神經網路的結構,num_units就是這個層的隱藏神經元個數,就這麼簡單。其中1、2、4的啟用函式是 sigmoid,第三個的啟用函式是 tanh。

另外幾個需要注意的地方:

1、 cell 的狀態是乙個向量,是有多個值的。

2、 上一次的狀態 h(t-1)是怎麼和下一次的輸入 x(t) 結合(concat)起來的,這也是很多資料沒有明白講的地方,也很簡單,concat, 直白的說就是把二者直接拼起來,比如 x是28位的向量,h(t-1)是128位的,那麼拼起來就是156位的向量。

3、 cell 的權重是共享的,這是什麼意思呢?這是指這張上有三個綠色的大框,代表三個 cell 對吧,但是實際上,它只是代表了乙個 cell 在不同時序時候的狀態,所有的資料只會通過乙個 cell,然後不斷更新它的權重。

4、那麼一層的 lstm 的引數有多少個?根據第 3 點的說明,我們知道引數的數量是由 cell 的數量決定的,這裡只有乙個 cell,所以引數的數量就是這個 cell 裡面用到的引數個數。假設 num_units 是128,輸入是28位的,那麼根據上面的第 2 點,可以得到,四個小黃框的引數一共有 (128+28)*(128*4),也就是156 * 512,可以看看 tensorflow 的最簡單的 lstm 的案例,中間層的引數就是這樣,不過還要加上輸出的時候的啟用函式的引數,假設是10個類的話,就是128*10的 w 引數和10個bias 引數

5、cell 最上面的一條線的狀態即 s(t) 代表了長時記憶,而下面的 h(t)則代表了工作記憶或短時記憶。

lstm的訓練過程:

說明:上面畫紅框的地方,如想輸出如上的三維矩陣,需要指明引數:return_sequences=true

再附一張圖:

白色框框中,第一行是實現細節,第二行是第一行輸出結果的維度。

對於雙向的bi-lstm網路:

正向求得的第乙個正h_1和反向求得的最後乙個反h_-1,生成的結果進行對應位置相加,然後再經過act(w_y*h)+b_y得到對應的y.

DeepLearning之LSTM模型輸入引數

lstm模型 輸入引數理解 long short term memory lstm是rnn模型的一種變種模式,增加了輸入門,遺忘門,輸出門。lstm也是在時間序列 中的常用模型。小白我也是從這個模型入門來開始機器學習的坑。lstm的基本概念與各個門的解釋已經有博文寫的非常詳細 推薦博文 譯 理解ls...

多層LSTM結構的深入解讀

讀這篇文章的時候,預設你已經對lstm神經網路有了乙個初步的認識,當你深入理解時,可能會對多層lstm內部的隱藏節點數,有關cell的定義或者每一層的輸入輸出是什麼樣子的特別好奇,雖然神經網路就像是乙個黑箱子一樣,但是我們仍然試圖去理解他們。我們所說的lstm的cell就是這樣子的乙個結構 圖中標識...

TF多層 LSTM 以及 State 之間的融合

第一是實現多層的lstm的網路 第二是實現兩個lstm的state的concat操作,分析 state 的結構.對於第乙個問題,之前一直沒有注意過,看下面兩個例子 在這裡插入 片 import tensorflow as tf num units 20,20 unit1,ok x tf.random...