2016-06-28 66 views
5

有沒有辦法計算LSTM網絡中的參數總數。如何計算LSTM網絡的參數數量?

我找到了一個例子,但我不確定this是多麼正確或如果我已經正確地理解它。

對於例如考慮下面的例子: -

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.layers import Embedding 
from keras.layers import LSTM 
model = Sequential() 
model.add(LSTM(256, input_dim=4096, input_length=16)) 
model.summary() 

輸出
____________________________________________________________________________________________________ 
Layer (type)      Output Shape  Param #  Connected to      
==================================================================================================== 
lstm_1 (LSTM)      (None, 256)   4457472  lstm_input_1[0][0]    
==================================================================================================== 
Total params: 4457472 
____________________________________________________________________________________________________ 

按我理解n是輸入矢量lenght。 和m是時間步數。在這個例子中他們認爲隱藏層數爲1.

因此根據公式the post.4(nm+n^2)在我的例子中m=16; n=4096; num_of_units=256

4*((4096*16)+(4096*4096))*256 = 17246978048 

爲什麼會有這樣的差異? 我誤解了這個例子還是公式錯了?

+0

參考此鏈接,如果你需要一些幫助視力: http://datascience.stackexchange.com/questions/10615/number-of-parameters-in-an-lstm-model – Ali

回答

14

否 - 在Keras一個LSTM層的參數的數目等於:

params = 4 * ((size_of_input + 1) * size_of_output + size_of_output^2) 

附加1來自偏差項。因此n是輸入的大小(由偏置項增加)並且m是LSTM層的輸出的大小。

所以最後:

4 * (4097 * 256 + 256^2) = 4457472 
+0

感謝答案..你還可以添加源文件 –

+1

謝謝!我試圖推導出這一點,只是無法弄清楚插入那個缺少「+1」的術語。 – Prune

+0

所以,如果我沒有錯誤的input_length作爲參數沒有影響,因爲相同的權重矩陣將被重複使用1或100時間步驟?? –

1

式擴大@JohnStrong

意味着我們有不同的權重和偏置變量3柵極(讀/寫/ froget)和 - 4- th - 對於單元狀態(在相同的隱藏狀態內)。 (這些提到的沿特定隱藏狀態向量的時間步長中被共享)

4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size) 

作爲LSTM輸出(Ý)是ħ(隱藏狀態)的方法,因此,不需要額外的突起,用於LSTM輸出我們有:

lstm_hidden_state_size = lstm_outputs_size 

讓我們說這是d:

d = lstm_hidden_state_size = lstm_outputs_size 

然後

params = 4 * d * ((lstm_inputs_size + 1) + d) = 4 * ((lstm_inputs_size + 1) * d + d^2)