🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**循环神经网络**(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个**状态**(state),其中包含与已查看内容相关的信息. > 当你在阅读这个句子时,你是一个词一个词地阅读(或者说,眼睛一次扫视一次扫视地阅读),同时会记住之前的内容。这让你能够动态理解这个句子所传达的含义。生物智能以渐进的方式处理信息,同时保存一个关于所处理内容的内部模型,这个模型是根据过去的信息构建的,并随着新信息的进入而不断更新。 ![](https://img.kancloud.cn/d3/cb/d3cbd41f580b6acd3e74bf2ccb43d862_408x344.png) ***** ### Keras 中的循环层 ~~~ from keras.layers import SimpleRNN ~~~ > 与 Keras 中的所有循环层一样,`SimpleRNN`可以在两种不同的模式下运行 * 返回每个时间步连续输出的完整序列,即形状为`(batch_size, timesteps, output_features)`的三维张量 * 只返回每个输入序列的最终输出,即形状为`(batch_size, output_features)`的二维张量 * 这两种模式由`return_sequences`这个构造函数参数来控制 * `SimpleRNN`的最大问题是,在时刻`t`,理论上来说,它应该能够记住许多时间步之前见过的信息,但实际上它是不可能学到这种长期依赖的。其原因在于**梯度消失问题**(vanishing gradient problem),这一效应类似于在层数较多的非循环网络(即前馈网络)中观察到的效应:随着层数的增加,网络最终变得无法训练。 > `SimpleRNN`并不是 Keras 中唯一可用的循环层,还有另外两个:`LSTM`和`GRU` **`LSTM`层:** * 其背后的长短期记忆(LSTM,long short-term memory) * `LSTM`层是`SimpleRNN`层的一种变体,它增加了一种携带信息跨越多个时间步的方法 * 保存信息以便后面使用,从而防止较早期的信号在处理过程中逐渐消失 * **只需要记住 LSTM 单元的作用:允许过去的信息稍后重新进入,从而解决梯度消失问题**