用于神经机器翻译的编码器 - 解码器循环神经网络模型_Machine Learning Mastery 博客文章翻译

用Python实现CNN长短期记忆网络!你也行

图:pixabay

原文来源:
https://machinelearningmastery.com/

作者:Jason Brownlee

「机器人圈」编译:嗯~阿童木呀、多啦A亮

大家应该都很清楚,诸如图像这样的具有空间结构的输入,是不能用标准的Vanilla LSTM来进行简单建模的。

卷积神经网络长期短期记忆网络或简称CNN LSTM,它是LSTM架构,是专门为诸如图像或视频等序列预测问题而设计的LSTM架构。

在这篇文章中,你将了解更多关于用以序列预测的CNN LSTM架构的详细信息。

阅读本文之后,你将会知道:

?用于序列预测的CNN LSTM模型架构的发展。

?适合用CNN LSTM模型进行处理的问题类型的示例。

?在Python中如何用Keras实现CNN LSTM架构。

一切准备就绪,开始启程吧。

CNN LSTM架构

CNN LSTM架构涵盖了使用卷积神经网络(CNN)层对输入数据结合LSTM架构进行特征提取,以支持序列预测。

CNN LSTM被开发用于视觉时间序列预测问题和从图像序列(例如视频)生成文本描述的应用。具体来说,问题包括以下几种:

?行为识别:生成图像序列中演示的行为的文本描述。

?图像描述:生成单个图像的文本描述。

?视频描述:生成图像序列的文本描述。

[CNN LSTM]是一类在空间和时间上都具有一定深度的模型,它可以灵活地应用于一系列涉及顺序输入和输出的视觉任务。

——《用于视觉识别和描述的长期循环卷积网络》(
https://arxiv.org/abs/)

其实这种架构最初被称为长期循环卷积网络或LRCN模型,尽管在此次课程中,我们将使用更通用的名称“CNN LSTM”来指代使用CNN作为前端的LSTM。

该架构主要用于生成图像的文本描述任务。其中最关键的是CNN的使用,它要在一个具有挑战性的图像分类任务中进行预训练,而这个任务被重新定义为用于标题生成问题的特征提取器。

将CNN用作图像“编码器”是很自然的,首先对它进行预训练,以用于图像分类任务,并使用最后一个隐藏层作为生成句子的RNN解码器的输入。

——《展示并讲述:神经图像字幕生成器》(
https://arxiv.org/abs/)

除此之外,该架构还被用于语音识别和自然语言处理问题,其中CNN用作音频和文本输入数据中的LSTM特征提取器。

这种架构非常适合于以下问题:

?在其输入中具有空间结构,例如图像中的2维结构或像素,或者是句子、段落以及文档中的单词的1维结构。

?在其输入中具有时间结构,例如视频中的图像顺序或文本中的单词,或者需要在文本描述中生成具有时间结构的输出,例如文本描述中的单词。

卷积神经网络长短期记忆网络的网络架构

用keras实现CNN LSTM

我们可以定义一个用Keras联合训练的CNN LSTM模型。

关于CNN LSTM的定义可以这样理解:在前端添加CNN层,然后在输出端添加具有密集层的LSTM层。

将此架构定义为是由两个子模型组成的是有帮助的:用于特征提取的CNN模型和用于在时间步长中解释特征的LSTM模型。

让我们在一个具有二维输入序列(我们将其假设为图像)的情境中来理解这两个子模型。

CNN模型

我们可以定义一个2D卷积网络,由Conv2D和MaxPooling2D层组成,并将其层叠到所需深度的堆叠中。

Conv2D将解释图像的快照(例如,小方块),池化层将合并或抽象解释。

例如,下面的代码片段可以读取具有1个通道(例如黑色和白色)的×像素图像。 Conv2D将以2×2快照读取图像,并输出图像的一个新的×的解释。MaxPooling2D将将解释池化为2×2块,将输出减少到5×5合并中。打散的层将采取单个5×5映射,并将其转换为个元素的向量,为处理其他层做准备,例如用于预测输出的密度。

这对于图像分类和其他计算机视觉任务是有意义的。

LSTM模型

以上CNN模型只能处理单个图像,将其从输入像素转换为内部矩阵或向量表示。

我们需要跨多个图像重复此操作,并允许LSTM使用反向传播(BPTT)在输入图像的内部矢量表示的序列之间建立内部状态并更新权重。

在使用现有的预编程模型(如VGG)进行图像特征提取的情况下,CNN可以被固定。CNN可能没有受过训练,我们可能希望通过从多个输入图像到CNN模型的LSTM的反向传播误差来训练。

在这两种情况下,概念上,都存在一个CNN模型和一系列LSTM模型,每个时间步长一个。我们要将CNN模型应用于每个输入图像,并将每个输入图像的输出作为单个时间步长传递给LSTM。

我们可以通过将整个CNN输入模型(一层或更多层)缠绕在TimeDistributed层中来实现。该层实现了多次施加相同层或多层的期望结果。在这种情况下,将其多次应用到多个输入时间步骤,并向LSTM模型轮流提供一系列“图像解释”或“图像特征”。

我们现在有两个模型元素:让我们把它们放在一起

CNN LSTM模型

我们可以通过首先定义CNN层或层,将它们缠绕在TimeDistributed层中,然后定义LSTM和输出层,从而在Keras中定义CNN LSTM模型。

我们有两种方法定义模型,它们是等价的,只是品味不同而已。

你可以先定义CNN模型,然后通过将整个CNN层序列缠绕在TimeDistributed层中,将其添加到LSTM模型,如下所示:

另一种代替的方法,也许更容易阅读的方法是将时间分布图中的每个层缠绕在CNN模型中,将其添加到主模型中。

第二种方法的好处是,所有层都出现在拟合优度情况简报中,对目前来说这是最合适的。

当然,你可以根据自己的品味选择你喜欢的方法。

进一步阅读

如果你想进一步深入了解,本部分将提供更多关于该主题的资源。

CNN LSTM论文

?《用于视觉识别和描述的长期循环卷积网络》(
https://arxiv.org/abs/)

?《展示并讲述:神经图像字幕生成器》

年(
https://arxiv.org/abs/)

?《卷积式、长短期记忆、完全连接的深度神经网络》(
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/.pdf)

?《字符意识神经语言模型》

(https://arxiv.org/abs/)

?《卷积式LSTM网络:降水预报机器学习方法》

年(
https://arxiv.org/abs/)

Keras API

?Conv2D Keras API

?MaxPooling2D Keras API

?Flatten Keras API

?TimeDistributed Keras API

帖子

?用于机器学习的卷积神经网络速成课程(
http://machinelearningmastery.com/crash-course-convolutional-neural-networks/)

?LSTM循环神经网络与Keras的Python序列分类(
http://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/)

原文链接:,转发请注明来源!