keras的timestep导入问题

本博客用伪代码来代替繁杂的数學公式让跟多人能够避开令人眼花的复杂公式,通过伪代码快速理解RNN和LSTM RNN的计算步骤然后用通俗的话来解释其工作原理,达到对其原理囷结构的理解然后用RNN和LSTM RNN做一个简单的应用,并分析其差异和优劣

具体的RNN背景和数学推导,大家可以参考这篇
首先在结构上来感受一下RNN如下图所示
我们用伪代码来解释其结构

其中我们输入的样本形状为(timesteps, input_features),而整个网络对时间步(timestep)进行遍历在每个时间步,它考虑t 时刻的當前状态与t时刻的输入[形状为(input_ features,)]对二者计算得到t 时刻的输出。然后我们将下一个时间步的状态设置为上一个时间步的输出。

为了进┅步了解其计算我们用numpy来实现RNN的向前传播:

LSTM 层是SimpleRNN 层的一种变体,它增加了一种携带信息跨越多个时间步的方法假设有一条传送带,其運行方向平行于你所处理的序列序列中的信息可以在任意位置跳上传送带,然后被传送到更晚的时间步并在需要时原封不动地跳回来。这实际上就是LSTM 的原理:它保存信息以便后面使用从而防止较早期的信号在处理过程中逐渐消失。

而LSTM是在RNN的基础上添加了一个额外的数據流
ct?进行计算和处理作为输入函数的一部分,伪代码如下


  

如果我们非要解释每一个计算目的我认为是没有必要的。因为这些运算的實际效果是由参数化权重决定的而权重是以端到端的方式进行学习,每次训练都要从头开始不可能为某个运算赋予特定的目的。RNN 单元嘚类型(如前所述)决定了你的假设空间即在训练期间搜索良好模型配置的空间,但它不能决定RNN 单元的作用那是由单元权重来决定的。同一个单元具有不同的权重可以实现完全不同的作用。因此组成RNN 单元的运算组合,最好被解释为对搜索的一组约束而不是一种工程意义上的设计。

对于研究人员来说这种约束的选择(即如何实现RNN 单元)似乎最好是留给最优化算法来完成(比如遗传算法或强化学习過程),而不是让人类工程师来完成在未来,那将是我们构建网络的方式总之,你不需要理解关于LSTM 单元具体架构的任何内容作为人類,理解它不应该是你要做的你只需要记住LSTM 单元的作用:允许过去的信息稍后重新进入,从而解决梯度消失问题

首先我们选择keras的timestep内置嘚IMDB数据集进行情感分类,关于这个数据集及相关实验可以参考上一篇,如果因为网络问题下载失败请移步。

首先准备IMDB数据集


如果keras的timestep对你的研究有帮助的话請在你的文章中引用keras的timestep。这里是一个使用BibTex的例子

我要回帖

更多关于 keras的timestep 的文章

 

随机推荐