Keras中的多对一和多对多LSTM示例
deep-learning
keras
machine-learning
neural-network
5
0

我试图了解LSTM以及如何使用Keras构建它们。我发现,原则上有4种模式可以运行RNN(图中的4种正确模式)

在此处输入图片说明图片来源: Andrej Karpathy

现在,我想知道在Keras中,每个代码的简约代码段看起来如何。所以像

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

对于这4个任务中的每一个,也许都需要一点解释。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

所以:

  1. 一对一 :您可以使用Dense层,因为您不处理序列:

     model.add(Dense(output_size, input_shape=input_shape)) 
  2. 一对多 :不很好地支持此选项,因为在Keras链接模型并不容易,因此以下版本是最简单的:

     model.add(RepeatVector(number_of_times, input_shape=input_shape)) model.add(LSTM(output_size, return_sequences=True)) 
  3. 多对一 :实际上,您的代码段(几乎)是此方法的一个示例:

     model = Sequential() model.add(LSTM(1, input_shape=(timesteps, data_dim))) 
  4. 多对多 :输入和输出的长度与循环步数匹配时,这是最简单的代码段:

     model = Sequential() model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True)) 
  5. 当步数与输入/输出长度不同时,多对多 :这在Keras中非常难。没有简单的代码片段可以对此进行编码。

编辑:广告5

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

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | | | | 
                                  O O O O O O

您可以通过以下方式实现此目的:

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

其中N是要覆盖的最后步骤数(在图像N = 3 )。

从这一点开始:

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | 
                                  O O O 

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

收藏
评论

@MarcinMożejko的出色回答

我会在NR.5中添加以下内容 (很多输入/输出长度很多的人):

A)香草LSTM

model = Sequential()
model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES)))
model.add(Dense(N_OUTPUTS))

B)作为编解码器LSTM

model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES))  
model.add(RepeatVector(N_OUTPUTS))
model.add(LSTM(N_BLOCKS, return_sequences=True))  
model.add(TimeDistributed(Dense(1)))
model.add(Activation('linear')) 
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号