问题标签 [lstm-stateful]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
350 浏览

tensorflow - 如何将此 keras 模型(tf 版本 1.15,动态 LSTM)转换为 TFLite?

我需要在 Keras 中构建一个与 tensorflow 1.15 兼容的 LSTM 网络。

这是我打开的另一篇关于如何创建网络的帖子。 keras LSTM 模型 - 与 tflite 一起使用的 tf 1.15 等效模型

我正在使用的版本: tf版本:1.15.0tf.keras版本:2.2.4-tf

按照这个例子: https ://github.com/tensorflow/tensorflow/tree/r1.15/tensorflow/lite/experimental/examples/lstm https://github.com/tensorflow/tensorflow/blob/r1.15/tensorflow /lite/experimental/examples/lstm/TensorFlowLite_LSTM_Keras_Tutorial.ipynb

我设法为我需要的网络创建了一个代码。

这是“源”网络(带有 keras.LSTM 层):

在此处输入图像描述

这就是我实现它的方式:

在此处输入图像描述

现在,我需要将其转换为 TFLite。

首先,当我尝试保存并加载它时,它不起作用:

这个笔记本中,他们展示了如何正确地将其转换为 TFLite。

我尝试在我的代码中遵循相同的模式:

但我收到:

试试 2 -

如果我使用 cell = tf.lite.experimental.nn.TFLiteLSTMCell(num_units, state_is_tuple=True)

代替 cell = tf.nn.rnn_cell.BasicLSTMCell(num_units, state_is_tuple=True)

我收到:

我错过了什么?

它与此文档说明有关吗?

谢谢

0 投票
0 回答
15 浏览

keras - 扩展新数据 LSTM

我有一个经过训练的有状态 LSTM 模型,该模型包含一段时间内的时间序列数据,但是可能会出现超出MinMaxScaler我使用过的新数据。

例如,我的训练集中的最小值是 0.8,最大值是 1.5。现在,新数据的值范围超出了这个范围,比如[0.7, 0.75, 0.7, 0.6]. 我该如何处理?我试图找到这个问题的答案,但我不确定我什么时候做一个新的预测,缩放是如何工作的。

我是否需要对MinMaxScaler我拥有的所有数据(包括新数据集)使用 ,还是我只是继续使用训练集中的缩放 MinMax 结果?

如果这是一个愚蠢的问题,我很抱歉,但我要么错过了这个,要么根本找不到它,谢谢!

0 投票
0 回答
34 浏览

pytorch - 具有不同时间步长的 PyTorch LSTM

是否可以在时间步长不同的 PyTorch 中创建 LSTM?例如,在不同时间进行测量的高度。数据可能如下所示:

人员编号 英寸高 日期
1 12 2020-01-01
1 15 2020-03-09
1 32 2020-04-01
1 40 2021-01-01
2 38 2020-05-20
...

鉴于 4 个高度和日期的历史,我想预测特定日期的高度:

我在'2022-01-01'上面的 4 个元组之后通过了,因为我想预测我在这个日期的身高。

这可能吗?我怎样才能做到这一点?

0 投票
0 回答
50 浏览

tensorflow - Keras 有状态 LSTM 批量大小与训练大小警告

Keras要求批量大小是训练和测试数据的一小部分,LSTM layer因为Keras 会预先分配一个数组(请参阅此堆栈溢出帖子参阅此博客)。stateful=True

如果您不这样做,您将在训练时期结束时获得incompatible shape error

如果有更好的警告,它会为我节省相当多的时间,例如WARNING: A stateful LSTM requires the number of samples to be a multiple of the batch size.,然后我就不会寻找我重塑数据数组的失败。


问题:

作为一个更好的警告也可能对其他试图将博客中batch_size通常看到的内容增加到更大的人有益,我想提出一个请求,将此警告添加到 Keras tensorflow1

因为我从来没有这样做过,所以我不确定哪里是请求的正确位置。因为它既不是 bug 也不是特性,它不属于tensorflow 问题

此外,我没有足够的信心自己解决这个问题并提出拉取请求。

有谁知道应该在哪里(以及是否)提出这个请求?


我使用: tensorflow版本=2.4.1

0 投票
0 回答
23 浏览

r - R Keras - 模型是用形状 (1, 16, 1) 构建的,但它是在形状不兼容的输入上调用的 (1, 1, 1)

我正在尝试使本教程适应我的单变量数据,以学习 R 中的 LSTM 时间序列预测。我认为问题出在定义模型的步骤中,但我不知道我缺少什么

当我运行下面的代码时,我收到一条警告消息WARNING:tensorflow:Model was constructed with shape (1, 16, 1) for input KerasTensor(type_spec=TensorSpec(shape=(1, 16, 1), dtype=tf.float32, name='lstm_95_input'), name='lstm_95_input', description="created by layer 'lstm_95_input'"), but it was called on an input with incompatible shape (1, 1, 1).

我所有的预测都是一样的

0 投票
0 回答
44 浏览

python - PyTorch:尝试更新隐藏状态时出现 LSTM 错误

我正在尝试训练 LSTM,同时保持其隐藏状态(LSTM 有状态),直到我要开始一个新的时代(剧集)。但是这里出现了一个有趣的情况,因为我在尝试这样做时遇到了以下错误:

RuntimeError:梯度计算所需的变量之一已被就地操作修改:[torch.cuda.FloatTensor [705, 25]] 为版本 3;而是预期的版本 2。提示:上面的回溯显示了未能计算其梯度的操作。有问题的变量在那里或以后的任何地方都被改变了。祝你好运!

这发生在我试图保持隐藏状态时,例如,我将使用一条细线:

dist, _ = self.actor(state, h_out)并且删除retain_graph=True所有内容都会正常工作。

你们中的任何人都可以帮助我了解这里发生了什么以及我该如何解决这个问题吗?

我在这里有我的训练循环:

这是我的优化功能:

0 投票
1 回答
85 浏览

python - 在 Keras Tuner 搜索期间,如何获得有状态 LSTM 来重置其状态?

我正在尝试使用 Keras Tuner 调整有状态 LSTM。我的代码工作正常,它能够训练模型,但我仍然不知道如何让模型在时期之间重置状态。通常我会在一个循环中一次训练 1 个 epoch 并在 epoch 之间手动 reset_states。但是,我认为这对 Keras Tuner 来说是不可能的。有没有我可以使用的论点来实现这一点?这是我当前的调谐器代码如下:

0 投票
1 回答
24 浏览

r - 让我了解模型

我正在处理一个在 R 中使用 LSTM 预测电力输出的问题。我在这里找到了一个非常适合我的数据的代码。但问题是我不明白是什么意思

  1. 单位
  2. 输入形状
  3. layer_dropout
  4. layer_dropout
  5. 失利
  6. 亚当

下面是我提到我的问题列表的代码。

0 投票
0 回答
160 浏览

python - 使用 LSTM 预测样本外时间点

我正在使用 LSTM 解决时间序列预测问题。数据是单变量和非平稳的。我按照以下教程进行操作:

https://machinelearningmastery.com/time-series-forecasting-long-short-term-memory-network-python/

数据处理如下:首先,取每两个连续时间点之间的差值。然后,通过将下一个时间点作为标签,将数据格式化为监督学习问题。最后,在 1 和 -1 之间进行缩放。然后使用处理后的数据来拟合 LSTM 模型。使用测试数据完成相同的处理步骤以检查 LSTM 预测。执行差值和缩放的逆以播种预测值。一切都很好,我在测试集上得到了很好的结果。但问题是当我想预测下一个样本外的时间点时。假设我有 100 个数据点,70 个点用于训练,30 个用于测试,我想预测点号 101 等等。我试着用

模型.预测(X)

但它不起作用。X 不能简单地是数据集中的最后一个时间点,因为模型应该接收 X 作为已处理(差分和缩放)数据的序列。我不知道我应该怎么做才能让模型预测下一个(样本外)点。任何人都可以帮忙吗?

这是我正在关注的代码:

0 投票
1 回答
192 浏览

keras - 我可以将我的长序列分成 3 个较小的序列并使用有状态 LSTM 处理 3 个样本吗?

我正在做一个时间序列序列分类问题。

我有 80 个时间序列,全长 1002。每个序列对应于 4 个类别中的 1 个(铜、镉、铅、汞)。我想使用 Keras LSTM 对此进行建模。这些模型需要以表格形式提供数据[batches, timesteps, features]。由于每个 seq 都是独立的,因此最基本的设置是X_train具有 shape [80, 1002, 1]。这在 LSTM 中运行良好(使用stateful=False

但是,1002 是一个相当长的序列长度。较小的尺寸可以表现更好。

假设我将每个 seq 分成 334 的 3 部分。我可以继续使用无状态 LSTM。但是(我认为?)让它对 3 个样本有状态然后重置状态是有意义的(因为 3 个块是相关的)。

如何在 Keras 中实现这一点?

[240, 334, 1]首先,我使用一个简单的方法将数据转换为形状,X_train.reshape(-1, 334, 1)但是如何保持 3 个样本的状态,然后重置状态model.fit()

我知道我需要打电话给model.reset_states()某个地方,但找不到任何示例代码来告诉我如何工作。我必须对模型进行子类化吗?我可以使用for epoch in range(num_epochs)and来做到这一点GradientTape吗?我有哪些选择?我该如何实施?

另外,如果我将序列拆分,我该如何处理标签?我是否将它们乘以每个 seq 分成的块数(在这种情况下为 3)?LSTM 有没有办法摄取 3 个样本然后吐出一个预测?还是每个样本都必须对应一个预测?

最后,如果我将我的序列分成 3 个子序列,我是否必须有 3 个批量大小?或者我可以选择 3 的任意倍数吗?

这是我使用的超级基本代码X_train.shape == [80, 1002, 1]

我知道这里有很多问题,如果这对一个人来说太多了,我很乐意提出单独的问题。