图: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]是一类在空间和时间上都具有一定深度的模型,它可以灵活地应用于一系列涉及顺序输入和输出的视觉任务。
——2015《用于视觉识别和描述的长期循环卷积网络》(https://arxiv.org/abs/1411.4389)
其实这种架构最初被称为长期循环卷积网络或LRCN模型,尽管在此次课程中,我们将使用更通用的名称“CNN LSTM”来指代使用CNN作为前端的LSTM。
该架构主要用于生成图像的文本描述任务。其中最关键的是CNN的使用,它要在一个具有挑战性的图像分类任务中进行预训练,而这个任务被重新定义为用于标题生成问题的特征提取器。
将CNN用作图像“编码器”是很自然的,首先对它进行预训练,以用于图像分类任务,并使用最后一个隐藏层作为生成句子的RNN解码器的输入。
——2015《展示并讲述:神经图像字幕生成器》(https://arxiv.org/abs/1411.4555)
除此之外,该架构还被用于语音识别和自然语言处理问题,其中CNN用作音频和文本输入数据中的LSTM特征提取器。
这种架构非常适合于以下问题:
•在其输入中具有空间结构,例如图像中的2维结构或像素,或者是句子、段落以及文档中的单词的1维结构。
•在其输入中具有时间结构,例如视频中的图像顺序或文本中的单词,或者需要在文本描述中生成具有时间结构的输出,例如文本描述中的单词。
卷积神经网络长短期记忆网络的网络架构
用keras实现CNN LSTM
我们可以定义一个用Keras联合训练的CNN LSTM模型。
关于CNN LSTM的定义可以这样理解:在前端添加CNN层,然后在输出端添加具有密集层的LSTM层。
将此架构定义为是由两个子模型组成的是有帮助的:用于特征提取的CNN模型和用于在时间步长中解释特征的LSTM模型。
让我们在一个具有二维输入序列(我们将其假设为图像)的情境中来理解这两个子模型。
CNN模型
我们可以定义一个2D卷积网络,由Conv2D和MaxPooling2D层组成,并将其层叠到所需深度的堆叠中。
Conv2D将解释图像的快照(例如,小方块),池化层将合并或抽象解释。
例如,下面的代码片段可以读取具有1个通道(例如黑色和白色)的10×10像素图像。 Conv2D将以2×2快照读取图像,并输出图像的一个新的10×10的解释。MaxPooling2D将将解释池化为2×2块,将输出减少到5×5合并中。打散的层将采取单个5×5映射,并将其转换为25个元素的向量,为处理其他层做准备,例如用于预测输出的密度。
这对于图像分类和其他计算机视觉任务是有意义的。
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论文
•《用于视觉识别和描述的长期循环卷积网络》2015(https://arxiv.org/abs/1411.4389)
•《展示并讲述:神经图像字幕生成器》
2015年(https://arxiv.org/abs/1411.4555)
•《卷积式、长短期记忆、完全连接的深度神经网络》2015(https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43455.pdf)
•《字符意识神经语言模型》
2015(https://arxiv.org/abs/1508.06615)
•《卷积式LSTM网络:降水预报机器学习方法》
2015年(https://arxiv.org/abs/1506.04214)
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/)
回复「转载」获得授权,微信搜索「ROBO_AI」关注公众号
点击下图加入
中国人工智能产业创新联盟在京成立 近200家成员单位共推AI发展
关注“机器人圈”后不要忘记置顶哟
我们还在搜狐新闻、机器人圈官网、腾讯新闻、网易新闻、一点资讯、天天快报、今日头条、QQ公众号…
↓↓↓点击阅读原文查看中国人工智能产业创新联盟手册