我在理解堆叠LSTM网络中层的输入输出流方面遇到了一些困难。假设我创建了一个堆叠的LSTM网络,如下所示:
# parameters
time_steps = 10
features = 2
input_shape = [time_steps, features]
batch_size = 32
# model
model = Sequential()
model.add(LSTM(64, input_shape=input_shape, return_sequences=True))
model.add(LSTM(32,input_shape=input_shape))
其中我们的堆叠LSTM网络由2个LSTM层组成,分别具有64个和32个隐藏单元。在这种情况下,我们期望在每个时间步骤,第一个LSTM层-LSTM(64) - 将作为输入传递给第二个LSTM层-LSTM(32) - 一个大小为[batch_size, time-step, hidden_unit_length]
的向量,它将代表隐藏状态当前时间步的第一个LSTM层。令我困惑的是:
X(t)
(作为输入)接收第一层-LSTM(64)的隐藏状态 - 其大小为[batch_size, time-step, hidden_unit_length]
并将其传递通过它自己的隐藏网络 - 在这种情况下由32个节点 - ?input_shape
和第二个-LSTM(32)的input_shape
是相同的,当第二个只处理第一层的隐藏状态时?在我们的情况下不应该[32, 10, 64]
设置为here?我发现下面的LSTM可视化非常有用(找到input_shape
),但它不会在stack-lstm网络上扩展:
任何帮助将受到高度赞赏。谢谢!
只有第一层需要input_shape
。后续层将前一层的输出作为其输入(因此忽略它们的model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(5, 2)))
model.add(LSTM(32))
参数值)
下面的模型
代表以下架构
model.summary()
您可以从_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_26 (LSTM) (None, 5, 64) 17152
_________________________________________________________________
lstm_27 (LSTM) (None, 32) 12416
=================================================================
验证它
model.add(LSTM(32))
替换线
model.add(LSTM(32, input_shape=(1000000, 200000)))
同
model.summary()
仍然会给你相同的架构(使用input_shape
验证)因为被忽略,因为它将前一层的张量输出作为输入。
如果您需要一个序列来排序如下所示的体系结构
model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(5, 2)))
model.add(LSTM(32, return_sequences=True))
你应该使用代码:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_32 (LSTM) (None, 5, 64) 17152
_________________________________________________________________
lstm_33 (LSTM) (None, 5, 32) 12416
=================================================================
哪个应该返回一个模型
qazxswpoi