在Keras中实现LSTM

5

我正在使用Tensorflow后端的Keras。

model = Sequential()
model.add(Masking(mask_value = 0., input_shape = (MAX_LENGTH, 1)))
model.add(LSTM(16, input_shape = (BATCH_SIZE, MAX_LENGTH, 1), return_sequences = False))
model.add(Dense(units = 2))
model.add(Activation("sigmoid"))
model.compile(loss = "binary_crossentropy", optimizer = "adam", metrics = ["accuracy"])

这段Python代码可以运行,但我想知道是有16个只有1个cell的LSTM块,还是只有1个有16个cells的LSTM块。
提前感谢!

LSTM architecture

3个回答

4

好的,你的问题让我思考,我想我可能有些过头了,但是这里有一段代码片段,我用它来获取LSTM实现背后的一些见解。

from keras.layers import LSTM
from keras.models import Sequential

model = Sequential()
model.add(LSTM(10, input_shape=(20, 30), return_sequences=True))
model.compile(loss='mse',optimizer='adam', metrics=['accuracy'])
weights = model.get_weights()

现在,通过检查权重的形状,我们可以对正在发生的事情有所了解。
In [12]: weights[0].shape
Out[12]: (30, 40)
In [14]: weights[1].shape
Out[14]: (10, 40)
In [15]: weights[2].shape
Out[15]: (40,)

以下是它们的描述:

In [26]: model.weights
Out[26]: 
[<tf.Variable 'lstm_4/kernel:0' shape=(30, 40) dtype=float32_ref>,
 <tf.Variable 'lstm_4/recurrent_kernel:0' shape=(10, 40) dtype=float32_ref>,
 <tf.Variable 'lstm_4/bias:0' shape=(40,) dtype=float32_ref>]

那些是唯一可用的权重。我还去看了Keras实现,网址为https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1765。因此,您可以看到@gorjan是正确的,它实现了一个单元格,意味着4个门(用于循环输入和序列输入),以及它们的偏置。这里的“层”思想应该应用于LSTM展开的次数,在这种情况下为30。希望这有所帮助。

感谢您的帮助。现在我明白了,keras实现了一个维度对应于单元数的单元。有些人将单元的维度称为“单元数”,所以我感到困惑。在您的示例中,单位数为10,特征数为30,时间步数为20,对吗?那么,我不确定是否要问LSTM将展开的次数是20。 - I-was-a-Ki
是的,这很令人困惑。您可以将这些单元视为标准密集层中的“神经元”,因为它们随后被门使用。很高兴我能帮到您。接受它作为答案怎么样? - Diego Aguado
是的,再次感谢您的回答。 - I-was-a-Ki

1

这是用于一个块,16个单元格的,据我所知。


1
当你使用单元格LSTM、GRU时,你实际上没有层数的概念。你拥有的是一个单元格,它实现了几个门。每个门由一个单独的权重矩阵组成,模型将在训练过程中学习到这些矩阵。例如,在你的情况下,你将拥有1个单元格,其中每个由矩阵定义的门都将具有维度(feature_size_of_your_input, 16)。我建议你在开始实现这种东西之前,仔细阅读http://colah.github.io/posts/2015-08-Understanding-LSTMs/。否则,你只是把它们当作黑盒模型使用,而不理解发生了什么。

谢谢你的回答,抱歉我的解释不好。可能存在术语问题,但我害怕问一下你的“cell”是否对应于上图中的“block”,而您的“block”也对应于“layer”。 - I-was-a-Ki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接