python - keras lstm 区别 stateless 和 stateful
问题描述
我试图理解 Keras 中 LSTM 层的概念。我只是想确认 LSTM 的一些行为并检查我是否理解正确。
假设我有 1000 个样本,并且这些样本有 1 个时间步长,并且当我的批量大小为 1
stateful = True
这是否与具有 1000 个时间步长且批量大小为 1 的 1 个样本相同
stateful = False
在这里,我还假设在这两种情况下,我都有相同的信息,只是形状不同,并且在每个训练时期后我都会重置 LSTM 层的状态。
我也认为无状态情况下的批量大小只对我的训练序列很重要,因为如果我设置
stateful = False
我可以使用 input_shape 而不是 batch_input_shape。所以我的 LSTM 层不需要批量维度,只需要时间步长和特征维度。这个对吗?
我从以下得出这个结论:
https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1847
如果我有一个多层 LSTM 网络,如果第一个 LSTM 层是有状态的,那么所有其他层也应该是有状态的,对吗?
我希望有人明白我的意思并能帮助我。如果我的问题无法理解,请告诉我,我会更新这篇文章。
谢谢大家。
解决方案
stateful=True
意味着您保留每批的最终状态并将其作为下一批的初始状态传递。所以是的,在这种情况下,如果您有 1 批 1000 个样品或 1000 批 1 个样品,情况是一样的。
推荐阅读
- android - 嵌套滚动视图中的 StreetViewPanoramaView 不起作用
- python - 基于python中的最高有效位对二进制矩阵列进行排序
- python - 在 kv 文件中,如何将方法从父级传输到其子级
- scala - Scala:在 if 条件下声明 val
- angular - Angular 非全局单例服务
- javascript - 如何在formik中提交对象数组?
- ionic-framework - phonegap-plugin-push 消息未显示为 android
- ios - 使用您生成的应用专用密码登录。如果您忘记了应用专用密码或需要创建一个新密码 -22938
- c# - 如何在 Microsoft Visual Studio 2017 中安装 XNA 框架?
- node.js - 无法使用 npm-postgres 发布 postgres 客户端