CNN + LSTM

CNN + LSTM,第1张

CNN能够提取输入项目的特征,但是它不会去管这些特征在哪里

LSTM是RNN的变体,能够处理序列化的输入,该网络的内部机制能够选择性的记忆或者遗忘输入的信息,最后得到输入信息在不同环境下的表示。长短期记忆(Long short-term memory, LSTM)是基散笑一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。具体内部机制详见大佬链接[ https://zhuanlan.zhihu.com/p/32085405]

情感分析 :

第一个尝试的模型是CNN-LSTM 模型,我们的CNN-LSTM 模型结合由初始的卷积层组成,这将接收word embedding(对文档中每个不同的单词都得到一个对应的向量)作为输入。然后将其输出汇集到一个较小的尺寸,然后输入到LSTM层。隐藏在这个模型后面的直觉是卷积搏含层将提取局部特征,然后LSTM层将能够使用所述特征的排序来了解输掘备入的文本排序。实际上,这个模型并不像我们提出的其他LSTM-CNN模型那么强大。

不是很清楚你要如何处理你的数据。

1. 如果是想用卷积层前处理很多张图片,然而再用LSTM预测这种顺序的图片,那么你的tensor会多一个time_step维度。

但是time_step的维度是为LSTM准备的。进入卷积层之前,你应该会需要将输纤罩入reshape。

输入:(samples, time_step, channel, length, width)毁迅闹,

channel, length, width不变。将samples, time_step reshape到一个维度上。

keras.layers.core.Reshape((-1, channel, length, width))

变成:(samples*time_step, channel, length, width)

这时再送入卷基层。

卷基层处理完后,你应该还会需要model.add(Flatten()):#(若要保留某维为后用,则用reshape)

变成(samples*time_step, nb_features_from_last_layer_in_cnn )

这时再reshape回来,keras.layers.core.Reshape((samples, time_step, channel, length, width))

然后送入LSTM层处理。

如果还想接feedforward layers,你还需要reshape。

这里的问题是time_step是只在LSTM层需要,其他层time_step可以被看做samples

2. 如果你是想用卷积层中已有的维(比如length、width、channels、filters)作为time_step,那么你需要Permute((, , , ))来调节tensor对应的维。比如将长度作为time step用递归层来抓取特点,单靠permute可以。但是你描述的貌似是多个图昌纤片序列,那需要第一种reshape来做。

长短时神经网络是一种特殊的递归神经网络,所谓递归神经网络就是网络能够解决时间序列问题的预测。所谓递归神经网络就是网络中具有循环结构。递归神经网路从某种程度来说和传统的神经网络并非完全不同。可以将递归神经网络想象成有多层相同网络结构的神经网络,每一层将信息传递给下一层(以下借鉴一些十分易懂的图片):

上述是为了便于理解网络送展示的示意图,实际上网络结构只是仔培上图左边的一小块。

普通的RNN没有办法解决需要长时记忆的功能。比如试图预测“I grew up in France… I speak fluent French.”中最后一个词。最近信息显示下一个词可能是一门语言的名字,但是如果我们想要缩小选择范围,我们需要包含“法国”的那段上下文,从前面的信息推断后面的单词。相关信息与预测位置的间隔很大是完全有可能的。然而RNNs并没有办法解决这种问题。

LSTM作为效果比较好的递归神经网络,拥有者对长时时间序列问题很好的解决能力。

LSTM也有这样的链式结构,但其重复模块内部的机构不同。具体如下:

之下说明一下内部四个网络的具体意义。

主要分为: 单元状态 + 门限

单元状态:让信息以不变的方式向下流动,相当于猜仿一个传送带,但传送带上的东西会随着他通过每一个重复模块基于当时的输入有所增减。

门限:有能力向单元状态增加或者剔除信息的管理机构,相当于传送带上放东西或者拿走东西的那个人。在LSTM中由sigmoid函数和乘法加法来控制这个过程。

上图通过当前时间的输入和前一个时间的输出来通过sigmoid函数来使得单元状态乘以这个sigmoid函数的输出。若sigmoid函数输出0则该部分信息需要被遗忘,反之该部分信息继续在单元状态中继续传下去。

该门限功能是更新旧的单元状态。之前的遗忘门限层决定了遗忘或者添加哪些信息,由该门限层来执行实现。

最后,我们需要决定念兆唯需要输出什么。这个输出将会建立在单元状态的基础上,但是个过滤版本。首先,我们运行一个sigmoid层来决定单元状态中哪些部分需要输出。然后我们将单元状态输入到tanh函数(将值转换成-1到1之间)中,然后乘以输出的sigmoid门限值,所以我们只输出了我们想要输出的那部分。

上面提到的是非常常规的LSTM网络,LSTM有许多不同的变种,下面来介绍几种。

就是使用耦合遗忘和输入门限。我们不单独决定遗忘哪些、添加哪些新信息,而是一起做出决定。在输入的时候才进行遗忘。在遗忘某些旧信息时才将新值添加到状态中。

它将遗忘和输入门限结合输入到单个“更新门限”中。同样还将单元状态和隐藏状态合并,并做出一些其他变化。所得模型比标准LSTM模型要简单,这种做法越来越流行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11985697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存