我很难理解层叠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网络由两个LSTM层组成,分别有64个和32个隐藏单元。在这种情况下,我们期望在每个时间步骤--第一层-LSTM(64)- -将作为输入传递到第二层-LSTM(32)- -一个大小为[batch_size, time-step, hidden_unit_length]
的向量,它将在当前时间步表示第一个LSTM层的隐藏状态。令我困惑的是:
[batch_size, time-step, hidden_unit_length]
并通过它自己的隐藏网络(在这种情况下由32个节点组成)吗?input_shape
(64)和第二层的-LSTM(32)是相同的,而第二层只处理第一层的隐藏状态?在我们的例子中,input_shape
不应该设置为[32, 10, 64]
我发现下面的LSTM可视化非常有用(找到了这里),但是它并没有扩展到堆叠的lstm网络上:
任何帮助都将不胜感激。谢谢!
发布于 2019-03-27 13:14:20
第一层只需要input_shape
。随后的层以前一层的输出作为输入(因此忽略了它们的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
=================================================================
发布于 2020-08-10 19:52:39
在keras文档中,提到的输入是[batch_size, time-step, input_dim]
,而不是[batch_size, time-step, hidden_unit_length]
,所以我认为64,32协同响应X输入有64个特性,LSTM-32在每一时间步骤中都有32个特性。
https://stackoverflow.com/questions/55385906
复制相似问题