keras中双向LSTM流程的验证

keras中双向LSTM流程的验证,第1张

  在keras中,双向循环神经网络,无论是普通的RNN还是LSTM还是GRU,都没有直接定义的层函数。需要另外先导入一个双向结构Bidirectional,并且不能直接从keras.layers导入,直接导入会报错(说起来都是辛酸泪),正确的导入方法如下:

其中参数layer就是RNN的类型,可以使简单的SimpleRNN , LSTM , 或者是GRU等等。merge_mode = ‘ concat’表示最后前向的输出和后向输出的连接方式,concat表示直接连接,类似于列表直接加上去的那种。

  和普通LSTM的输入类似,input还是为【batch_size,time_step,num】其中num表示单个时间点上向量的长度,此处搭建的双向LSTM模型的隐藏层的向量维度为5,输入的向量维度为4,每一个时间点都返回一个维度为【batch_size,5】的结果,最后的输出的连接方式为直接像列表那样堆叠。其中400个参数怎么来的:

  前向循环过程中,输入层和循环层之间之间的权重 其维度为 ,因为这里集成了单个LSTM的3个门控结构和一个输入单元状态的权重,在前向计算的时候,每个时间点的权重是复用的,即不同时间点输入和循环层的权重都是一样的(但前向和后向计算时权重不能复用),具体解释详见: keras中LSTM流程的验证 ,前向计算过程中,循环成之间的权重 ,其权重维度为 ,因为隐藏层的向量维度为5,所以,权重为5*20,其也是将3个门控结构和单元状态都集成在了一个权重参数中,最后加上偏置 ,也是集成了3个门控结构和输入单元状态的参数。

  反向循环过程中,输入层和反向循环层之间的权重 ,其维度和前向循环的维度一样,都为 ,反向循环层之间的权重和前向循环层维度一样 【这里说的只是维度,但数据不同,反向循环不能复用前向循环的参数】,偏置长度也为 。所以整个参数的个数为: 。

前向计算结果一致

结果一致,整个双向LSTM验证通过,存储和计算的流程验证和我想象中的一样。

一般的前馈网络就是:输入->处理->输出,但是对于序列或者依赖于时间的信号,比如音乐,视频,传感器数据等,就不是很适用。循环神经网络能把整个序列的行为在模型内建模出来。最初的循环神经网络模型在1970到1980年提出来的,简单的循环神经网络或者叫Elamn network是由Jeff Elman在1990年于 Finding Structure in Time 中提出来的。

当前时刻的输入乘以权重之后,加上额外的来自上一个时间的隐藏状态(hidden state),得到当前时刻的输出以及传向下一个时刻的隐藏状态。循环的圈的意思就是,用现在和不久之前的信息得到现在的输出。展开之后的每一个单元都有着相同的权重(其实就是同一个)。

那么隐藏状态是怎么计算的,输入和隐藏状态又是怎么得到输出的?

隐藏状态:

输出:

序列之间的关系有:一对一(图片分类),一对多(图片说明),多对一(语义分析),多对多(视频分类)。

深度RNN多个单元叠加在一起,在每个时间上可以有更深层的网络。

参考:

[1] https://stackoverflow.com/questions/43034960/many-to-one-and-many-to-many-lstm-examples-in-keras

[2] How to Scale Data for Long Short-Term Memory Networks in Python


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

原文地址: http://outofmemory.cn/yw/11246602.html

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

发表评论

登录后才能评论

评论列表(0条)

保存