专栏名称: 雷克世界
赛迪研究院(CCID)主办的新媒体平台,每天跟你聊聊机器人、人工智能、智能制造领域的那些你想知道的事……
目录
相关文章推荐
ChatAI42技术与产品  ·  Aguvis:提升的不仅是 UI ... ·  3 天前  
高工机器人  ·  嘉宾预告 ... ·  6 天前  
51好读  ›  专栏  ›  雷克世界

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

雷克世界  · 公众号  · 机器人  · 2017-08-21 16:37

正文

图: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公众号…

↓↓↓点击阅读原文查看中国人工智能产业创新联盟手册