Python 在Keras中实施LSTM

Python 在Keras中实施LSTM,python,tensorflow,keras,lstm,Python,Tensorflow,Keras,Lstm,我使用Keras使用Tensorflow后端 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(&

我使用Keras使用Tensorflow后端

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个LSTM块,每个块有1个单元格,还是有1个LSTM块,每个块有16个单元格

提前谢谢


它适用于1个块,16个单元,afaik。

当您使用单元
LSTM,GRU
时,您没有层本身的概念。你实际上拥有的是一个单元,它实现了几个门。每个门由一个单独的权重矩阵组成,模型将在培训期间学习该矩阵。例如,在您的例子中,您将有一个单元格,其中由矩阵定义的每个门都有一个维度
(您的输入的特征大小,16)
。我建议你仔细阅读:在你开始实施这类东西之前。否则,你只是把它们当作一个黑匣子模型来使用,而不了解引擎盖下发生了什么。

好吧,你的问题让我思考了一下,我认为我做得太多了,但这里什么都没有。 下面是我为深入了解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>]
[26]中的
:model.weights
出[26]:
[,
,
]
这些是唯一可用的重量。我还去看了Keras的实施情况

所以你可以看到@gorjan是对的,它实现了一个单元,这意味着4个门(用于循环输入和序列输入),以及它们的偏差

此处的“层”思想应适用于LSTM展开的次数,在本例中为30


希望这能有所帮助。

谢谢你的回答,很抱歉我解释得不好。可能会有术语方面的问题,但我不敢问您的“单元”是否对应于上图中的“块”,以及您的“块”是否也对应于“层”。我感谢您的帮助。现在,我知道keras实现了一个单元,其尺寸对应于单元数。有人把一个细胞的尺寸称为“细胞的数量”,所以我很困惑。在您的示例中,单元数是10,功能数是30,时间步数是20,对吗?因此,我不敢问,LSTM的展开次数是否为20次。是的,这很令人困惑。你可以把这些单元想象成标准密集层中的“神经元”,因为它们被门使用。很高兴我能帮忙。接受它作为回答怎么样?是的,再次感谢你的回答。