在文本生成任务中,我们通常使用模型的最后一个输出作为当前输入来生成下一个单词。更一般化,我想实现一个神经网络,将下一层的最终隐藏状态视为当前层的输入。就像下面这样(令我困惑的是解码器部分):
但是我已经阅读了Keras文档,但没有找到任何实现它的功能。
我可以通过Keras实现这种结构吗?怎么样?
答案 0 :(得分:6)
您展示的结构是自定义结构。因此,Keras没有提供任何类或包装来直接构建这样的结构。但是,你可以在Keras建立这种结构。
所以,看起来你需要向后方向的LSTM模型。我不明白其他部分可能看起来像将前一句嵌入作为输入结合到LSTM单元的下一个时间步输入。
我宁愿鼓励您先使用LSTM进行简单的语言建模。然后,您可以稍后调整架构以构建图中所示的架构。
示例:
答案 1 :(得分:2)
你问的是自动编码器,你可以在Keras找到类似的结构。
但是有一些细节你应该自己解决。包括填充策略和预处理输入和输出数据。您的输入无法获得动态输入大小,因此您需要为输入和输出设置固定长度。我不知道你加入一个圆圈的箭是什么意思,但我想你可以看看Keras的Merge层(基本上是添加,连接等)。
您可能需要4个sequential模型和一个代表组合结构的最终model。
另外一件事,LSTM(语言模型)的解码器设置在设计上不是动态的。在模型定义中,您基本上为其引入了固定的输入和输出。然后你正确准备培训,所以你不需要任何动态。然后在测试期间,您可以通过在预测下一个输出步骤后运行模型并在下一个时间步骤再次运行模型来预测循环中的每个解码字,依此类推。