LSTM的神經元個數

目錄:html


1.LSTM簡單介紹

LSTM在時間上展開
LSTM在時間上展開

紅框從左到右,依次是:
忘記門層: 決定從細胞狀態中丟棄什麼信息,經過當前時刻輸入和前一個時刻輸出決定
細胞狀態: 肯定並更新新信息到當前時刻的細胞狀態中
輸出門層: 基於目前的細胞狀態決定該時刻的輸出python

2.簡單假設樣例

假設現有一個樣本,Shape=(13,5),時間步是13,每一個時間步的特徵長度是5.形象點,我把一個樣本畫了出來:markdown

一個樣本

使用Keras框架添加LSTM層時,個人設置是這樣的keras.layers.LSTM(10),也就是我如今設定,每一個時間步通過LSTM後,獲得的中間隱向量是10維(意思是5->10維),13個時間步的數據進去獲得的是(13*10)的數據.網絡

每一個時間步對應神經元個數(參數個數)同樣.也就是算一個LSTM中神經元個數,算一個時間步中參與的神經元個數便可.下面將對LSTM每一個計算部分進行神經元分析.框架

3.神經元分析

3.1忘記門層

忘記門層
忘記門層

圖中公式的是上一個狀態的隱向量(已設定隱向量長度爲10),爲當前狀態的輸入(長度爲5),那麼的長度就是10+5=15了.爲該層的參數.ide

該層輸出是中間隱向量的長度(10),通過激活先後的長度不變.只須要考慮裏面的操做獲得10維特徵便可.svg

是(1,15)的向量,與相乘獲得(1,10)的向量,根據矩陣相乘規律,獲得是(15,10)的矩陣,獲得(1,10)矩陣後,與該門層偏置相加,偏置也應該有相同的形狀,即是(1,10)的矩陣.函數

即:該層神經元爲:學習

3.2細胞狀態

(1)肯定更新信息過程測試

肯定該時刻細胞要更新的內容
肯定該時刻細胞要更新的內容

能夠看到,這裏公式和前面的同樣的,都是激活函數,不影響參數個數.

同理這過程的神經元個數是:

(2)更新過程

細胞狀態更新
細胞狀態更新

公式中的四個值,均是前面計算獲得的結果,所以該過程沒有參數須要學習.

3.3輸出層

輸出門層
輸出門層

同樣的公式,神經元個數同樣.即個數爲:

3.4總結

把公式(1),(2),(3)的神經元加起來,就是該LSTM的神經元個數了.

其實,咱們能夠把這個問題通常化,不看這個例子,假設你一個時間步的特徵長度是n,通過該LSTM獲得的長度是m,這樣就能夠算出該LSTM層的神經元個數爲:

4.測試

  1. from keras.layers import LSTM 
  2. from keras.models import Sequential 
  3.  
  4. time_step=13 
  5. featrue=5 
  6. hidenfeatrue=10 
  7.  
  8. model=Sequential() 
  9. model.add( LSTM(hidenfeatrue,input_shape=(time_step,featrue))) 
  10. model.summary() 

輸出是:

  1. _________________________________________________________________________________ 
  2. Layer (type) Output Shape Param #  
  3. ================================================================================= 
  4. lstm_8 (LSTM) (None, 10) 640  
  5. ================================================================================= 
  6. Total params: 640 
  7. Trainable params: 640 
  8. Non-trainable params: 0 
  9. _________________________________________________________________________________ 
  10.  

參考:
理解 LSTM 網絡
推薦給初學LSTM或者懂個大概卻不徹底懂的人

相關文章
相關標籤/搜索