问题标签 [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 投票
2 回答
221 浏览

lstm - 对于 LSTM 变量,我收到错误“张量流:变量不存在梯度”

嗨,我有一个双向 LSTM 层:

如您所见,我只是在使用 LSTM 的隐藏状态(而不是单元状态)

这就是原因,我是否收到以下警告:

警告:张量流:(后向层)的变量不存在梯度:

  1. lstm_cell_2/内核:0',
  2. lstm_cell_2/recurrent_kernel:0'
  3. lstm_cell_2/bias:0'

忽略这一点听起来不合逻辑。我该如何处理这个错误?

0 投票
0 回答
451 浏览

python - Keras Lstm 预测下一个项目,采用整个序列或滑动窗口。滑动窗口是否需要有状态的 LSTM?

我有一个序列预测问题,给定n序列中的最后一项,我需要预测下一项。

我有超过 200 万个序列,每个序列都有不同的timesteps( length of sequence),比如有些只有 5 个,有些是 50/60/100/200 到 500。

为了预测序列中的下一项,我trim将序列的最大长度设为 60,post/pre padding并且只取所有序列的最后一个元素

例如,X 将是

y 是最后一个元素

首先,我将它们标记化并使用数字形式将它们转换keras tokenizer.text_to_sequence()为 60 个时间步和每个序列的一个特征:**

我正在使用带有如下嵌入的 LSTM

对于我在序列中预测下一个项目的问题,这种方法(使用后/预填充将序列修剪到最大长度 60 并且仅将最后一个项目作为目标)是否合适?在我的示例中,每个目标将是不同的时间步长,例如 5th,50th,200th 等等。

我应该制作每个序列 n-gram/滑动窗口吗?例如对于我的数据集的第一个序列

滑动窗口 5 ,第一个例子将被转换为

同样其他的也将转换为滑动窗口。

再次总结问题和疑问:

使用当前的方法,将最后一个元素作为y,我对 30 个验证准确度感到震惊,但我关心的不是性能,我关心的是我是否做得对。因此,需要以下指导

  1. 由于我需要按顺序预测下一项,是否将最后一项作为每个序列的输出正确的方法?
  2. 由于我的输入长度不同(从 5 到 500)并且我将其限制为 60 个时间步,我应该增加还是减少它?
  3. 我应该像我分享的那样采用滑动窗口方法,而不是采用整个序列吗?
  4. 在滑动窗口的情况下我需要有状态的 LSTM 吗?
0 投票
1 回答
512 浏览

python - 如何将(多变量)时间序列加载到神经网络/LSTM 中

如何加载时间序列,例如:

在此处输入图像描述

进入神经网络(LSTM)。到目前为止,我已经看到了这个矩阵被转置的方法(https://github.com/curiousily/Getting-Things-Done-with-Pytorch/blob/master/06.time-series-anomaly-detection-ecg.ipynb )(小时为列,设备为行)。其他人创建自定义数据加载器:http ://www.feeny.org/custom-pytorch-dataset-class-for-timeseries-sequence-windows/并手动创建窗口。

为什么网络没有更多的原生方式来直接处理这个原始输入并学习模式/周期性/异常?如何将这种多设备的多元时间序列本地加载到(pytorch,tensorflow)中,以便生成的 LSTM 正确学习:

  • 单个时间序列的状态(至少在某个窗口内,不一定是整个潜在的无限时间序列)

  • 但在执行预测时还要考虑多个系列/设备/窗口的信息

0 投票
1 回答
206 浏览

lstm - nn.ModuleList 不允许传递隐藏和单元格值

我有一个带有 LSTM 的类,然后是 nn.ModuleList,我在其中定义了另外两个 LSTM 层,但是循环的前向函数失败并出现错误“forward() 需要 1 个位置参数,但给出了 3 个”。

分享了下面的代码和错误。当我尝试传递较早的层输出、单元状态和隐藏状态值但 nn.ModuleList 不允许时,它似乎失败了。谁能帮我解决这个问题?

代码

错误

0 投票
1 回答
203 浏览

python - TensorFlow different input and output shapes for stateful LSTM model

I would like to create a 'Sequential' model (a Time Series model as you might have guessed), that takes 20 days of past data with a feature size of 2, and predict 1 day into the future with the same feature size of 2.

I found out you need to specify the batch size for a stateful LSTM model, so if I specify a batch size of 32 for example, the final output shape of the model is (32, 2), which I think means the model is predicting 32 days into the future rathen than 1.

How would I go on fixing it?

Also, asking before I arrive to the problem; if I specify a batch size of 32 for example, but I want to predict on an input of shape (1, 20, 2), would the model predict correctly or what, since I changed to batch size from 32 to 1. Thank you.

0 投票
0 回答
41 浏览

python - Flask 上的 Keras 有状态 LSTM 推理

我正在运行一项服务,我使用 Keras 在有状态 LSTM 上运行推理。但是我想知道这里的线程语义是什么。我不是在问如何在每个烧瓶会话中存储模型,我对运行有状态模型时 Keras 引擎盖下发生的事情更感兴趣,例如每个线程创建一个新模型过度杀伤?Keras 是否自动处理每个线程的状态?

这个问题与所述的副本不同,因为副本明确处理每个烧瓶会话存储对象。这个问题涉及 Keras 如何处理线程之间的状态模型。

我的推理代码是这样的:

加载:

推理:

因为我重置了模型上的状态,这是否意味着我应该为每个线程创建一个新模型,或者当我对全局创建的偏差模型运行预测时执行锁定,或者我可能缺少一些其他机制?

我应该补充一点,我在 Keras 2.4.3 上运行 TF 2.3.1。通常,当我研究解决方案时,它们与这些版本不兼容。

0 投票
0 回答
125 浏览

tensorflow - 使用 Keras 优化黑盒功能的 LSTM

我正在尝试实现本文(https://arxiv.org/abs/1611.03824)中提出的递归神经网络架构,其中作者使用 LSTM 来最小化黑盒函数(但假设它是可微分的) )。这是所提出的架构的示意图:RNN。简而言之,这个想法是像优化器一样使用 LSTM,它必须学习一个好的启发式算法来为未知函数 y=f(parameters) 提出新参数,以便它向最小值移动。以下是建议程序的工作原理:

  1. p0为参数和函数选择一个初始值y0 = f(p0)
  2. 调用 LSTM 单元input=[p0,y0],其输出是参数的新值output=p1
  3. 评估y1 = f(p1)
  4. 用 调用 LSTM 单元input=[p1,y1],并获得output=p2
  5. 评估y2 = f(p2)
  6. 重复几次,例如在第五次迭代时停止:y5 = f(p5).

我正在尝试在 Tensorflow/Keras 中实现类似的模型,但遇到了一些麻烦。特别是,这种情况与“标准”情况不同,因为我们没有要分析的预定时间序列,而是在 LSTM 单元的每次迭代之后在线生成。[p0,y0=f(p0)]因此,在这种情况下,我们的输入将仅包含时间的开始猜测t=0。如果我理解正确的话,这个模型类似于一对多 LSTM,但不同的是,下一个时间步的输入不仅仅来自前一个单元,而且还形成了一个附加函数的输出(在我们的案例 f)。

我设法创建了一个自定义tf.keras.layers.Layer,它执行单个时间步长的计算(即它执行 LSTM 单元,然后将其输出用作函数 f 的输入):

但我不知道如何构建经常性部分。我尝试手动执行此操作,即执行以下操作:

那是对的吗?还有其他更合适的方法吗?

额外的问题:我想训练 LSTM,使其不仅能够优化单个函数 f,而且能够优化一类不同的函数[f1, f2, ...],这些函数具有一些共同的结构,这使得它们足够相似,可以使用相同的 LSTM 进行优化。我怎样才能实现这样一个训练循环,它将这些函数的列表作为输入[f1, f2, ...],并尝试将它们全部最小化?我的第一个想法是采用这种“蛮力”方式:在函数上使用 for 循环,tf.GradientTape并为每个函数评估和应用梯度。

任何帮助深表感谢!非常感谢您!:)

0 投票
0 回答
22 浏览

tensorflow - LSTM 随着输入数据长度的变化做出不同的预测

注意:以下所有数字仅供参考。

我用以下参数训练了我的 LSTM 模型:

我知道我需要至少 5 个样本来喂我model.predict(),以便预测未来的下一个结果。例如,假设我在 CSV 文件中有以下项目:

在此处输入图像描述

由于time_step等于 5,我将数据转换为 sahpe 为 1 x 5 x 4 的数组。我们称这个数组为 X_input。现在:

应该只返回 1 项。假设这个值为 58,这是正确的答案。例如,如果 CSV 文件包含 6 个项目:

在此处输入图像描述

X_input应该具有 2 x 5 x 4 的形状并model.predict()返回两个值,它们应该是 [57, 58]。

事实上,如果我的 CSV 文件中的最后 5 个样本相同,我希望最后的预测值保持不变(即 58),但事实并非如此!尽管我保持 CSV 文件中的最后 5 个样本不变,但它会随着 CSV 文件中的样本数量的变化而变化。

起初我认为这可能与stateful我的 LSTM 层中的参数有关。但由于我没有使用该参数,我假设它具有默认值,即 Flase。

请问有什么想法吗?

0 投票
1 回答
67 浏览

tensorflow - 如何为 Keras 有状态 LSTM 层设置输入?

我在 Keras 中为 stateful=True LSTM 层设置输入时遇到问题。这是我到目前为止所拥有的:

这似乎运行一个训练集,然后在做测试集时失败;我假设是因为我没有正确设置样品/批号。我只是使用随机数来尝试让有状态的 LSTM 层工作,然后我将用我的实际数据替换它,其中包含从 .wav 文件加载的两个音频样本。音频数据的大小约为 (8000000, 1),我希望将其设置为较小的批次以提供给有状态的 LSTM。我的“batch_input_shape”和输入数据张量应该是什么样的?

谢谢!

***更新:我看到的错误是由代码的另一部分引起的,上面的代码确实有效。

后续问题,如果我有两个音频信号,例如形状 (8000000,1),我将如何将批量数据设置到有状态 LSTM 中?我正在尝试训练一个适合第一个音频信号到第二个音频信号的模型(基本上就像一个音频滤波器)。


***第二次更新:我似乎正在接受训练以处理我的音频数据,但在第一个时代之后,我收到了这个错误:

这是我的代码:

0 投票
0 回答
141 浏览

android - 无法在 tensorflow lite 1.15 中运行 LSTM

TLDR:有人可以展示如何创建 LSTM,将其转换为 TFLite,并在 android 版本 1.15 中运行它吗?

我正在尝试创建一个简单的 LSTM 模型并在带有 tensorflow v115 的 android 应用程序中运行。

** 使用 GRU 和 SimpleRNN 层时情况相同 **

创建简单的 LSTM 模型

我在 Python 中工作,尝试了两个 tensorflow 和 keras 版本:最新(2.4.1 内置 keras)和 1.1.5(我安装了 keras 版本 2.2.4)。

我创建了这个简单的模型:

保存它

我将其保存为“SavedModel”和“h5”格式:

转换为 TFLite

我尝试在 v115 和 v2 版本中创建并保存模型。

然后,我尝试通过几种方法将其转换为 TFLite。

在 TF2 中:

  1. 我尝试从 keras 模型转换:
  1. 我尝试从保存的模型转换:
  1. 我尝试从 keras 保存的模型 (h5) 转换 - 我尝试同时使用tf.compat.v1.lite.TFLiteConverter和 tf..lite.TFLiteConverter。

安卓应用

build.gradle(模块:app)

当我想使用 v2 时,我使用:

当我想使用 v115 时,我implementation 'org.tensorflow:tensorflow-lite:1.15.0' 在构建等级中使用。

然后,我按照 android 中常见的 tflite 加载代码:

当我使用 v2 时,模型已加载。当我使用 v115 时,在我尝试过的所有选项中,我收到如下错误: A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x70 in tid 17686 (CameraBackgroun), pid 17643 (flitecamerademo)

我需要一个简单的结果 - 创建 LSTM 并使其在 android v115 中工作。

我错过了什么?谢谢