码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Keras中stateful的正确理解


    一、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单元模型:

            可以看到外部传递信息分别是x、h、c,我一般会将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 为何如此有效?这五个秘密是你要知道的

  • 相关阅读:
    Vue3-生命周期函数
    【大禹DGC】1-基本介绍
    【LVGL】ANIM(动画)学习
    学生宿舍护眼台灯怎么样选择?适合宿舍使用的五款台灯
    详解CentOS8更换yum源后出现同步仓库缓存失败的问题
    硬核实力!飞凌 TI Sitara AM62X 系列-335x经典再续
    一窥未来:PyQt5引领下一代Python GUI开发
    IDEA 部署服务到 Docker 容器
    【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色
    第27章_事务原理之MVCC与锁机制
  • 原文地址:https://blog.csdn.net/yangwohenmai1/article/details/126882142
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号