编码器-解码器LSTM是一个循环神经网络,旨在解决序列到序列问题,有时称为seq2seq。

序列到序列的预测问题具有挑战性,因为输入和输出序列中的项数可能会发生变化。 例如,文本翻译和学习执行程序就是seq2seq问题的示例。

在这篇文章中,您将发现用于序列到序列预测的Encoder-Decoder LSTM体系结构。

完成这篇文章后,您将知道:

  • 序列间预测的挑战。
  • 编码器-解码器体系结构以及旨在解决的LSTM中的限制。
  • 如何使用Keras在Python中实现Encoder-Decoder LSTM模型架构。
    在我的新书中找到了如何开发LSTM(例如,堆叠式,双向,CNN-LSTM,Encoder-Decoder seq2seq等)以及更多内容,其中包括14个循序渐进的教程和完整代码。

让我们开始吧。

序列到序列的预测问题

序列预测通常涉及预测实值序列中的下一个值或输出输入序列的类别标签。

这通常被构造为一个输入时间步长到一个输出时间步长(例如一对一)的序列或多个输入时间步长到一个输出时间步长(多个一对一)类型的序列预测问题。

存在一种更具挑战性的序列预测问题,该问题需要将序列作为输入并需要将序列预测作为输出。 这些称为序列到序列预测问题,或简称seq2seq。

使这些问题具有挑战性的一个建模问题是输入和输出序列的长度可能会变化。 假设有多个输入时间步长和多个输出时间步长,则这种形式的问题称为多对多类型序列预测问题。

编解码器LSTM架构

一种已经证明非常有效的解决seq2seq预测问题的方法称为Encoder-Decoder LSTM。

该体系结构由两个模型组成:一个模型用于读取输入序列并将其编码为固定长度的向量,第二个模型用于解码固定长度的向量并输出预测的序列。 协调使用这些模型使该架构的名称专门针对seq2seq问题设计的Encoder-Decoder LSTM。

编解码器LSTM的应用

下面的列表重点介绍了Encoder-Decoder LSTM体系结构的一些有趣应用。

机器翻译,例如 短语的英语到法语翻译。
学习执行,例如 计算小程序的结果。
图片字幕,例如 生成图像的文本描述。
会话建模,例如 生成文本问题的答案。
运动分类,例如 从一系列手势生成一系列命令。

在Keras中实现编码器-解码器LSTM

编码器-解码器LSTM可以直接在Keras深度学习库中实现。

我们可以认为模型由两个关键部分组成:编码器和解码器。

首先,将输入序列一次显示给网络一个编码字符。 我们需要一个编码级别来学习输入序列中步骤之间的关系,并开发这些关系的内部表示形式。

一层或多层LSTM层可用于实现编码器模型。 该模型的输出是一个固定大小的向量,代表输入序列的内部表示。 该层中存储单元的数量定义了此固定大小的向量的长度。

model = Sequential()
model.add(LSTM(..., input_shape=(...)))

解码器必须将学习到的输入序列的内部表示形式转换为正确的输出序列。

一个或多个LSTM层也可以用于实现解码器模型。 该模型从编码器模型的固定大小的输出中读取。

与Vanilla LSTM一样,密集层用作网络的输出。 通过将Dense层包装在TimeDistributed包装器中,可以使用相同的权重来输出输出序列中的每个时间步。

model.add(LSTM(..., return_sequences=True))
model.add(TimeDistributed(Dense(...)))

不过有一个问题。

我们必须将编码器连接到解码器,但它们不合适。

也就是说,编码器将产生一个二维输出矩阵,其长度由该层中存储单元的数量定义。 解码器是一个LSTM层,它需要[样本,时间步长,特征]的3D输入,以便产生问题定义的某些不同长度的解码序列。

如果尝试将这些部分拼合在一起,则会出现错误,指示解码器的输出为2D,并且需要将3D输入解码器。

我们可以使用RepeatVector层解决此问题。 该层简单地多次重复提供的2D输入以创建3D输出。

RepeatVector层可以像适配器一样使用,以将网络的编码器和解码器部分配合在一起。 我们可以将RepeatVec

model.add(RepeatVector(...))

放在一起,我们有:

model = Sequential()
model.add(LSTM(..., input_shape=(...)))
model.add(RepeatVector(...))
model.add(LSTM(..., return_sequences=True))
model.add(TimeDistributed(Dense(...)))

总而言之,RepeatVector用作适配器,以将编码器的固定大小的2D输出适配到解码器期望的不同长度和3D输入。 TimeDistributed包装器允许将相同的输出层重用于输出序列中的每个元素。

很高兴有时间可以亲自翻译和实践一下大神Jason这篇基于LSTM的多种类型网络的数据建模分析教程,欢迎感兴趣的同学一起交流学习共同进步。

编解码器长短期记忆神经网络相关推荐

  1. 小白学深度之LSTM长短期记忆神经网络——深度AI科普团队

    前言 不知道RNN的一定要先看看RNN的原理 在RNN中我们说了RNN的不足,也就是对较长的时间,或者较长的string,很多时候前面的数据对后面的数据影响就很小甚至没影响了,这是我们就要加强前面的数 ...

  2. 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

    时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络) 目录 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM ...

  3. 回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测

    回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测 ...

  4. 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测

    目录 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 程序设计 案例1 案例2 参考资料 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 ...

  5. 回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出

    回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出 目录 回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出 ...

  6. LSTM 长短期记忆神经网络及股票预测实现

    一.介绍 我们知道RNN(循环神经网络)可以通过时间序列预测输出,LSTM也具有同样的功能,那么为什么需要LSTM呢? 由于RNN在参数更新过程中参数矩阵更新可能会造成梯度消失的问题,这才演化出了具有 ...

  7. 回归预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络多输入单输出回归预测

    回归预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络多输 ...

  8. 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测

    时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测 预测效果 基本 ...

  9. 回归预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络多输入单输出回归预测

    回归预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络多输 ...

  10. 回归预测 | MATLAB实现Bayes-LSTM(贝叶斯优化长短期记忆神经网络)多输入单输出

    回归预测 | MATLAB实现Bayes-LSTM(贝叶斯优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现Bayes-LSTM(贝叶斯优化长短期记忆神经网络)多输入单输出 基 ...

最新文章

  1. Transformer模型有多少种变体?复旦邱锡鹏教授团队做了全面综述
  2. minicom指令_【教程】minicom使用教程
  3. 自定义状态栏notification布局
  4. mac系统下安装、启动、停止mongodb
  5. Windows usb设备正在使用中
  6. stm32 can bus 总结
  7. App设计灵感之十二组精美的家具产品电商App设计案例
  8. 《编程珠玑》笔记3 数据结构选择
  9. key redis 遍历_快乐运维Redis大数据量查询与清理
  10. Vue封装hbuilder热更新
  11. 方法覆盖异常篇 java 1615387415
  12. SQL语句实现行转列
  13. C++11特性补充笔记1
  14. atitit.农历的公式与原理以及农历日期运算
  15. 三成手机电子书暗藏陷阱 诱骗下载强行吸费
  16. Eclipse SVN提交代码ClientException异常解决
  17. java pdf 水印_java pdf加水印的方法
  18. Managed Direct3D开发经验浅析
  19. node.js(四 --- 全局对象)
  20. 数字IC后端实现40天速成篇(中)

热门文章

  1. 「腾讯地图」小程序插件
  2. 《设计模式》组合模式---伊利工厂
  3. Linux学习篇之权限管理
  4. 【Error】:10061由于目标计算机积极拒绝,无法连接
  5. 利用MVC思想和php语言写网站的心得
  6. 编译安装LAMP平台
  7. 205615872 能用来干么?
  8. 北京地铁5号线地图(线路图、站名、实拍pp)
  9. linux下安装rabbitmq以及在spring中进行集成
  10. ASP.NET CORE的H5上传