Keras中的多对一和多对多LSTM示例问题
0 1933
0

我尝试了解LSTM以及如何使用Keras构建它们。我发现,原则上有4种模式可以运行RNN(图中的4种正确模式) 我想知道,在Keras中,每个代码的简约代码片段会是什么样子。 像这样:

model = Sequential()
model.add(LSTM(128, input_shape=(timesteps, data_dim)))
model.add(Dense(1))

对于这4个模式中的每一个,都需要解释。

收藏
2021-02-02 11:31 更新 anna •  5042
共 1 个回答
高赞 时间
0

一对一:不处理序列时你可以使用一层Dense层,

model.add(Dense(output_size, input_shape=input_shape))

一对多:因为在Keras中链接模型不是很容易所以不支持此选项,,以下版本是最简单的版本:

model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))

多对一:实际上,你的代码段(几乎)是此方法的一个示例:

model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))

多对多:输入和输出的长度与循环步数匹配时,这是最简单的代码段:

model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequen

当步数与输入/输出长度不同时的多对多:这在Keras中非常难。没有简单的代码片段可以对此进行编码。

在我最近的一个应用程序中,我们实现了与第四张图片中的多对多内容相似的内容。如果你要使用以下架构的网络(输入长于输出时): 你可以通过以下方式实现此目的:

model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :])) #Select last N from output

N是你想覆盖的最后几个步数(在图片上N = 3) 从这一点开始:

这与使用0向量的长度为N的人工填充序列一样简单,以便将其调整为适当的大小。

Via:https://stackoverflow.com/a/43047615/14964791

收藏
2021-02-02 14:53 更新 karry •  4540