【问题标题】:Can I use next layer's output as current layer's input by Keras?我可以将下一层的输出用作 Keras 的当前层的输入吗?
【发布时间】:2017-07-25 05:18:29
【问题描述】:

在文本生成任务中,我们通常使用模型的最后一个输出作为当前输入来生成下一个单词。更概括地说,我想实现一个神经网络,将下一层的最终隐藏状态作为当前层的输入。就像下面这样(让我困惑的是解码器部分):

但是我已经阅读了 Keras 文档,并没有找到任何实现它的功能。

我可以通过 Keras 实现这种结构吗?怎么样?

【问题讨论】:

  • 你的文字是如何编码的?
  • @MarcinMożejko 我已经更新了编码器结构。但让我困惑的是解码器部分。

标签: neural-network nlp keras lstm


【解决方案1】:

您要问的是自动编码器,您可以在 Keras 中找到类似的结构。

但有些细节你应该自己弄清楚。包括填充策略和预处理您的输入和输出数据。您的输入无法获得动态输入大小,因此您需要为输入和输出设置固定长度。我不知道加入一个圆圈的箭头是什么意思,但我想你可以看看 Keras 中的Merge 层(基本上是添加、连接等)

您可能需要 4 个sequential 模型和一个代表组合结构的最终model

还有一点,LSTM(语言模型)的解码器设置在设计上不是动态的。在您的模型定义中,您基本上为它引入了固定的输入和输出。然后你正确地准备训练,所以你不需要任何动态的东西。然后在测试期间,您可以通过运行模型一次预测下一个输出步骤并在下一个时间步骤再次运行它来预测循环中的每个解码单词,依此类推。

【讨论】:

    【解决方案2】:

    您展示的结构是自定义结构。因此,Keras 没有提供任何类或包装器来直接构建这样的结构。但是是的,你可以在 Keras 中构建这种结构。

    所以,看起来您需要反向的 LSTM 模型。我不明白另一部分可能看起来像是将前一个句子嵌入作为输入到 LSTM 单元的下一个时间步输入。

    我宁愿鼓励您首先使用 LSTM 进行简单的语言建模。然后您可以稍后调整架构以构建如图所示的架构。

    例子:

    【讨论】:

    • 实际上,在问这个问题之前,我已经阅读并运行了文本生成示例。但它似乎直接生成单词而没有输出反馈。我还阅读了一些关于编码器-解码器模型的代码。但我不知道如何调整架构以实现图中描绘的架构。你能告诉我一些方法吗?谢谢!
    • “没有输出反馈”是什么意思?
    • 例如图中描述的模型使用输出'Mary'生成下一个输出'was',然后使用'was'生成'hungry'。据我了解,这是一种输出反馈。
    • 但我真正关心的是如何使用'Decode-Word'层的前句嵌入作为'Decode Sentence'层的LSTM单元的下一个时间步输入的输入。
    • @aweight 通常深度神经网络使用输出反馈,你可能对深度神经架构有错误的理解。我鼓励您看一些文章并阅读一些论文以获得更多想法。我可以说一件事,您正在寻找的模型已经开发出来并且构建起来并不难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多