I-w*_*-Ki 5 python lstm keras tensorflow
我正在使用 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"])
Run Code Online (Sandbox Code Playgroud)
这个Python代码可以工作,但我想知道是否有16个LSTM块,每个块有1个单元,或者1个LSTM块有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()
Run Code Online (Sandbox Code Playgroud)
现在,通过检查权重形状,我们可以直观地了解正在发生的情况。
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,)
Run Code Online (Sandbox Code Playgroud)
以下是对它们的描述:
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>]
Run Code Online (Sandbox Code Playgroud)
这些是唯一可用的权重。我还去https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1765查看了 Keras 实现
所以你可以看到 @gorjan 是对的,它实现了一个单元,即 4 个门(用于循环输入以及序列输入)及其偏差。
这里的“层”思想应该应用于 LSTM 展开的次数,在本例中为 30。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |