2016-06-28 57 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)