当前位置:   article > 正文

Keras中stateful的正确理解和使用方法_keras中lstm模型的的参数在timesteps之间和batch之间如何传递

keras中lstm模型的的参数在timesteps之间和batch之间如何传递

一、stateful的介绍

        首先强调一下stateful是Keras接口针对LSTM模型封装的一种状态传递机制,stateful控制的是每个batch外部的状态传递,而不是batch内部每个timesteps之间的状态传递。并且stateful是Keras接口提供的封装功能的一个参数,并非是LSTM模型本身的功能机制,明白上述内容很重要。

        我们先来看一下最不重要的Keras官方文档:

 

二、stateful的机制解析

         从官方文档上我们可以看出,他什么都没有说,甚至连x[i]大概长什么样都没说明白。我们从网上找一张图来解释一下

        上图表示的是一个Timestep=5,batch_size=2的序列,这里的batch_size也可以叫sample,后面统一将batch_size都称为sample。这里X1和X2就是连续的两个批次(batch),其中X1包含X1[0],X1[1]两个sample,X2包含X2[0],X2[1]两个sample。

        仔细观察图示可以看到,X1[0]是:床前明月光,X1[1]是:锄禾日当午,同一批次中相邻的两个样本并不属于同一首诗,这一点很重要,因为stateful的机制是将X1[i]的状态传递给X2[i],所以如果想把“床前明月光”的状态传递给“疑似地上霜”,那我们就要把“疑似地上霜”放在X2[0]的位置。这也就是本文开篇提到的stateful控制的是每个batch外部的状态传递,状态并不在一个batch内传递。此时再回头看官方文档,我们就很好理解了。

        X1[0]中包含5个Timestep:“床”、“前”、“明”、“月”、“光”,X1[0]中最后一个字“光”的状态会传递到X2[0]中第一个字“疑”作为初始状态,也就是用“光”输出的(h, c)来初始化“疑”的(h, c),至于(h, c)是什么后面会解释。所以官方文档称使用stateful时你要显示的指定sample,这个目的是为了保证length(X1)=length(X2)=length(X3)=...,这样才能保证每个sample的(h, c)都能继续传递下去。

        所以在LSTM模型中使用stateful时,不仅仅是设置参数,训练数据的构造也至关重要。我们训练一篇包含10000句话的文章,和训练100篇,每篇包含100句话的文章,数据的构造也是不同的。前者的sample=1,batch=10000。后者sample=100,batch=100。

        除此之外,我们还要保证每个batch之间保持正确的顺序,所以我们使用stateful的时要把另一个参数shuffle设置为False,因为这个参数会在训练前打乱训练集的数据顺序,导致stateful失效。

        除此之外网上还流行stateful其他几个版本的解释,我基本都看过,细节表述上或多或少都有问题。

三、Keras中stateful传递的状态到底是什么?

        首先我们来回顾一下经典的LSTM单元模型:

        可以看到外部传递信息分别是xhc,我一般会将h视为短期记忆信息,而将c视为长期记忆信息。那么LSTM如果想要进行长序列预测,则要将(h, c)信息在不同的batch之间持续传递下去,使得当前的LSTM单元能获取到历史的(h, c)信息,stateful起到的就是这个作用。

        至于那些记忆门\tilde{C}、输入门I、输出门O、遗忘门F的信息,都是在每个batch的当前sample所包含的Timestep内部传递和处理,stateful并不干预每个sample内部时间步的状态传递。

四、reset_states的内容补充

        在Keras中和stateful同时使用的另一个参数是reset_states,下篇文章我们就一起探究一下Keras中reset_states的使用方法。

Keras中reset_states对stateful的影响探究结合reset_states进一步理解statefulhttps://blog.csdn.net/yangwohenmai1/article/details/127792427?spm=1001.2014.3001.5501

参考文献:

深入理解Keras LSTM的stateful - 简书

Keras之stateful LSTM全面解析+实例测试 - 简书

Stateful LSTM in Keras – Philippe Remy – My Blog.

LSTM之Keras中Stateful参数 - 光彩照人 - 博客园

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

keras中关于输入尺寸、LSTM的stateful问题 - 简书

LSTM - 简书

LSTM 为何如此有效?这五个秘密是你要知道的

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号