首页  >  文章  >  后端开发  >  Keras 中的有状态 LSTM 与传统 LSTM 有何不同?我应该何时使用每种类型?

Keras 中的有状态 LSTM 与传统 LSTM 有何不同?我应该何时使用每种类型?

Susan Sarandon
Susan Sarandon原创
2024-11-05 04:17:02335浏览

How do Stateful LSTMs in Keras differ from traditional LSTMs, and when should I use each type?

了解 Keras 长短期记忆 (LSTM)

重塑和状态性

数据重塑:

重塑操作对于符合 Keras 的 LSTM 预期输入格式是必要的,即[样本、时间步长、特征]。在这种情况下,样本表示数据集中的序列数,时间步长表示每个序列的长度,特征指每个时间步长的输入变量的数量。通过重塑数据,您可以确保 LSTM 能够正确处理序列信息。

有状态 LSTM:

有状态 LSTM 在训练期间跨多个批次保留其内部状态。这使得它们能够“记住”迄今为止所看到的序列信息。在提供的示例中,batch_size 设置为 1,并且在训练运行之间重置内存。这意味着 LSTM 没有充分利用其有状态功能。为了利用有状态性,您通常会使用大于 1 的批次大小,并避免在批次之间重置状态。这使得 LSTM 能够学习跨多个序列的长期依赖关系。

时间步长和特征

时间步长:

时间步数指示数据集中每个序列的长度。在您共享的图像中,您正在考虑多对一的情况,其中可变长度序列被压缩为单个输出。粉色框的数量对应于输入序列中的时间步数。

特征:

特征的数量是指每个特征的输入变量的数量时间步。在多变量序列中,例如同时对多个金融股票进行建模,每个时间步长都会有多个特征,代表所预测的不同变量。

有状态 LSTM 行为

在图中,红色框代表隐藏状态,绿色框代表细胞状态。虽然它们在视觉上是相同的,但它们在 LSTM 中是不同的元素。 LSTM 的有状态行为意味着这些状态会延续到后续的时间步和批次。然而,值得注意的是,示例中训练运行之间的状态重置会阻止真正的状态性。

实现不同的 LSTM 配置

单层多对多:

要使用单个 LSTM 层实现多对多处理,请使用 return_sequences=True。这可确保输出形状包含时间维度,从而允许每个序列有多个输出。

单层多对一:

对于多对一处理,设置 return_sequences=False。这指示 LSTM 层仅输出最后一个时间步,从而有效地丢弃之前的序列信息。

具有重复向量的一对多:

创建在一对多配置中,您可以使用 RepeatVector 层将输入复制到多个时间步长中。这允许您将单个观察数据输入 LSTM 层并获得多个输出。

使用状态 LSTM 的一对多:

一种更复杂的实现方法一对多处理涉及使用 stateful=True。通过手动迭代序列并将每个时间步骤的输出作为下一个时间步骤的输入,您可以通过仅输入一个步骤来生成一系列输出。这通常用于序列生成任务。

复杂配置:

LSTM 可以堆叠在各种配置中以创建复杂的架构。例如,自动编码器可以将多对一编码器与一对多解码器结合起来,使模型能够学习序列的编码和解码。

以上是Keras 中的有状态 LSTM 与传统 LSTM 有何不同?我应该何时使用每种类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn