美文网首页
利用Keras搭建LSTM循环神经网络

利用Keras搭建LSTM循环神经网络

作者: 升不上三段的大鱼 | 来源:发表于2020-01-02 04:12 被阅读0次

一、循环神经网络

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

Recurrent neural network unfold-自己画的图

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


内部结构-自己画的图

隐藏状态: h_t = tanh(W_hh * h_{t-1} + W_xh *x_t+b_h)
输出: y_t = \sigma(W_hy *h_t + b_y)

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

二、Kears实现[1]

#一对一
model.add(Dense(output_size, input_shape=input_shape))
#一对多
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
#多对一
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
#多对多
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))

深度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

相关文章

网友评论

      本文标题:利用Keras搭建LSTM循环神经网络

      本文链接:https://www.haomeiwen.com/subject/siiioctx.html