为什么Keras模型中的第一个LSTM具有比后续模型更多的参数?

时间:2017-10-05 11:08:28

标签: keras keras-layer

我只是从一个相当简单的顺序模型中查看Keras模型细节,其中我有一个接一个的多个LSTM层。尽管与后续的LSTM层具有相同的定义,但我惊讶地发现第一层总是有更多的参数。

这里的模型定义清楚地表明了这一点:

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 400, 5)            380       
_________________________________________________________________
lstm_2 (LSTM)                (None, 400, 5)            220       
_________________________________________________________________
time_distributed_1 (TimeDist (None, 400, 650)          3900      
_________________________________________________________________
lstm_3 (LSTM)                (None, 400, 20)           53680     
_________________________________________________________________
lstm_4 (LSTM)                (None, 400, 20)           3280      
_________________________________________________________________

类似地,在时间分布的密集层之后,接下来的两个相同的LSTM也是如此。

我对LSTM的理解是不正确的,相同的定义不会导致同一层被生成为末尾标记的“重复”,或者我需要理解的参数中是否有其他内容?目前看起来对我来说很奇怪!

任何解释都可以帮助我(a)更好地理解,以及(b)根据这些新知识构建更多高性能模型。

1 个答案:

答案 0 :(得分:3)

LSTM的输出仅取决于其units

我们看到你的第一层都有5个单位 另外两个有20个单位。

可训练参数(用于对输入执行计算并带来预期输出的数字),需要考虑有多少输入要素,因为他们必须考虑所有输入在他们的计算中。

输入越大,需要的参数越多。我们可以告诉您输入中有5个以上的功能。对于最后两层,第一层的输入为650,而另一层的输入为20。

详细的参数数量。

在LSTM图层中,正如您在their code中看到的那样,有3组权重:

  • 内核 - 形状为(units, 4*inputs)
  • 重复内核 - 形状为(units,4*units)
  • 偏见 - 形状为(4*units,)

通过一些计算,我们可以推断出您的输入具有形状(None, 400, 13)

Layer (type)         Output Shape        Param #   
========================================================================
input_6 (InputLayer) (None, 400, 13)     0         
________________________________________________________________________
lstm_1 (LSTM)        (None, 400, 5)      380   = 4*(13*5 + 5*5 + 5)   
________________________________________________________________________
lstm_2 (LSTM)        (None, 400, 5)      220   = 4*(5*5 + 5*5 + 5)     
________________________________________________________________________
time_distributed_1   (None, 400, 650)    3900  = ?  
________________________________________________________________________
lstm_3 (LSTM)        (None, 400, 20)     53680 = 4*(650*20 + 20*20 + 20)   
________________________________________________________________________
lstm_4 (LSTM)        (None, 400, 20)     3280  = 4*(20*20 + 20*20 + 20)    
________________________________________________________________________
  • LSTM 1参数= 4 *(13 * 5 + 5 * 5 + 5)
  • LSTM 2参数= 4 *(5 * 5 + 5 * 5 + 5)
  • 时间分布= ??
  • LSTM 3参数= 4 *(650 * 20 + 20 * 20 + 20)
  • LSTM 4参数= 4 *(20 * 20 + 20 * 20 + 20)

其他图层具有相似的行为

如果您使用密集图层进行测试,您还会看到:

Layer (type)         Output Shape    Param #   
=========================================================
input_6 (InputLayer) (None, 13)      0      
_________________________________________________________
dense_1 (Dense)      (None, 5)       70    = 13*5 + 5      
_________________________________________________________
dense_2 (Dense)      (None, 5)       30    = 5*5 + 5   
_________________________________________________________
dense_3 (Dense)      (None, 650)     3900  = 5*650 + 650     
_________________________________________________________
dense_4 (Dense)      (None, 20)      13020 = 650*20 + 20   
_________________________________________________________
dense_5 (Dense)      (None, 20)      420   = 20*20 + 20    
=========================================================

不同之处在于密集层不具有重复内核,并且它们的内核不会乘以4.

  • 密集1参数= 13 * 5 + 5
  • 密集2参数= 5 * 5 + 5
  • 密集3参数= 5 * 650 + 650
  • 密集4参数= 650 * 20 + 20
  • 密集的5个参数= 20 * 20 + 20