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

为什么Keras模型中的第一个LSTM比后续LSTM具有更多的参数?,keras,keras-layer,Keras,Keras Layer,我只是从一个相当简单的顺序模型中查看Keras模型的细节,在这个模型中,我有多个LSTM层,一个接一个。我惊讶地发现,第一层总是有更多的参数,尽管它的定义与后续的LSTM层相同 此处的模型定义清楚地显示了这一点: Layer (type) Output Shape Param # ================================================================= lstm_1 (LST

我只是从一个相当简单的顺序模型中查看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)基于这些新知识构建更高性能的模型。

LSTM的输出仅取决于其
单位

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

<>但<强>可训练参数< /强>(输入的计算数,并带来预期的输出),这些需要考虑到多少输入特征即将到来,因为它们必须考虑它们计算中的所有输入。 输入越大,需要的参数就越多。我们可以看出,您的输入中有5个以上的功能。对于最后两层,第一层的输入是650,而另一层的输入是20


参数的详细数量。 在LSTM层中,如中所示,有3组权重:

  • 内核-形状为
    (单位,4*输入)
  • 循环内核-形状为
    (单位,4*单位)
  • 偏压-形状为
    (4*单位,)
通过一些计算,我们可以推断您的输入具有shape
(None,400,13)

  • 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

LSTM的输出仅取决于其
单位

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

<>但<强>可训练参数< /强>(输入的计算数,并带来预期的输出),这些需要考虑到多少输入特征即将到来,因为它们必须考虑它们计算中的所有输入。 输入越大,需要的参数就越多。我们可以看出,您的输入中有5个以上的功能。对于最后两层,第一层的输入是650,而另一层的输入是20


参数的详细数量。 在LSTM层中,如中所示,有3组权重:

  • 内核-形状为
    (单位,4*输入)
  • 循环内核-形状为
    (单位,4*单位)
  • 偏压-形状为
    (4*单位,)
通过一些计算,我们可以推断您的输入具有shape
(None,400,13)

  • 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

感谢您的详细回答。我理解到了一定程度,但我仍然缺少一些东西。在我的示例中,根据您的计算,lstm_2得到4*(5*5+5*5+5)个参数。因此,与lstm_1相比,这是否意味着有效输入宽度(每个时间步13个输入值)已被删除,并且lstm_2的宽度已缩小为1而不是13?宽度随每层中的单元数而变化。LSTM1将宽度13转换为5。LSTM2只看到5个进来。因为它有5个单位,所以它保持在5到5之间,但不一定平行,内部的东西会混在一起。我错过了。还有一个问题可以帮我把这个完全植入我的大脑。。。在LSTM层中,是否有方法设置内存运行的时间步数?学习状态影响当前时间步长的时间间隔有多远?或者,这仅仅是不同门之间互操作方式的一个特点,对这一点没有真正的控制?哇,我的理解有很大差距!据我所知,这是无法控制的。(但这里的人经常让我惊讶:))。人们通常做的是制作一个“滑动窗口”的盒子来伪造记忆长度。他们将原始序列分成更小的序列,所有的小序列都有所需的长度,并且它们重叠。假设你有一个5步的序列,但是你想要的记忆是3步。创建三个序列:[步骤1,步骤2,步骤3],[步骤2,步骤3,步骤4],[步骤3,步骤4,步骤5]。你还可以调整输出,使之与之匹配。好的,现在更有意义了。谢谢谢谢你的详细介绍