问题标签 [sequence-modeling]

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 投票
1 回答
53 浏览

tensorflow - 我们使用填充使序列长度相同还有其他原因吗?

我们使用填充使序列长度相同的长度还有其他原因吗?除了为了做矩阵乘法(因此做并行计算)。

0 投票
1 回答
416 浏览

deep-learning - 基于变压器的解码

变压器模型中的解码器可以像编码器一样并行化吗?据我了解,编码器具有序列中的所有标记来计算自注意力分数。但是对于解码器来说,这是不可能的(在训练和测试中),因为自我注意力是根据之前的时间步输出计算的。即使我们考虑使用诸如teacher forcing之类的技术,我们将预期输出与得到的输出连接起来,这仍然具有来自前一个时间步的顺序输入。在这种情况下,除了在捕获长期依赖关系方面的改进之外,在纯粹基于并行化进行比较时,使用转换器解码器是否比使用 lstm 更好?

0 投票
1 回答
52 浏览

tensorflow - 如何从序列模型中的给定数据集创建训练 - 开发 - 测试集

假设我们有以下数据集,其中“s”代表“步”。

该模型由 4 个(时间)步骤组成。它给出一个数字作为输出(目标)。在第一个示例中,step1 输入为 1,step2 输入为 2,step3 输入为 3,step4 输入为 4。我们将训练一个序列模型(使用 RNN、LSTM 或其他),然后输出“5 " 对于这个特定的序列。其他示例中的逻辑也是相同的。

我担心如何将这样的数据集划分为训练集和开发集。(暂时忽略测试集。)

备选方案 1: 假设前 3 个样本构成训练集,接下来的 2 个样本构成开发集,如下图所示。

动车组:

开发集:

我担心的是:如果您查看最后一个训练集样本 ([3, 4, 5, 6], 7) 和第一个开发集样本 ([4, 5, 6, 7], 8),您会看到3 个输入步骤相同。(即使使用其他开发集样本也存在类似的问题。)

Q1:是不是有些输入步骤相同的问题?或者我们可以说它不应该仅仅因为(1)即使输入步骤相同,它们也用于序列的不同步骤,(2)每个序列示例的目标值仍然不同。

Q2:上面的问题,应该如何创建测试集?

0 投票
1 回答
192 浏览

pytorch - 函数 nn.LSTM 在 batches/seq_len 中的行为如何?

我目前正在学习将nn.LSTM与 pytorch 一起使用,并且不得不询问该功能是如何工作的。

基本上我正在尝试提供我的数据集矩阵(M x N)。由于数据集是一个矩阵,我想使用Dataloader (utils.data.Dataset) 将数据集递归地(作为时间步长)馈送到 LSTM 网络中。

我感到困惑的是输入的大小(seq_len,batch,input_size)

假设我正在使用 batch_size=10 获取我的 data_loader。为了生成具有正确形式的 train_loader,我必须将 (M x N) 的先前大小变成包括可以简单地转换为 (M/seq_len, seq_len, N) 的 sequence_length 的大小。

然后我的 nn.LSTM 的输入大小将是: (M/seq_len/batch_size, seq_len, N)

所以,我的主要问题来了:

  1. 如果我将此数据大小输入 LSTM 模型 nn.LSTM(N, hidden_​​size),LSTM 模型是否已经在整个批次中进行递归前馈?

  2. 我也对 seq_len 感到困惑,当 seq_len>1 时,输出会得到 seq_len 的维度。这是否意味着输出包含序列的递归操作?

我不确定我是否把问题说清楚了,但是我的理解变得很混乱..lol 希望有人可以帮助我组织正确的理解。

0 投票
2 回答
290 浏览

python - 如何使用具有固定长度数据的 Keras 进行序列到序列模型 (RNN / LSTM)?

我想做的事情看起来很简单,但我在网上找不到任何例子。首先,我不是在使用语言工作,所以所有这些都给embedding我的任务增加了不必要的复杂性。

我有输入,以(1, 1000)向量的形式。它们是时间序列数据,所以我将按顺序排列其中的 10 个。如果我正确理解张量,哪一个给了我一些形状(10, 1, 1000),对吧?

我想通过 RNN/LSTM 传递它,输出也应该是相同的形状(10, 1, 1000)。即,10 个向量,每个向量 1000 维。

0 投票
0 回答
87 浏览

python - TF-IDF 向量与标记向量

一些背景:

我将数据结构化为形状的 TFIDF 向量,(15637, 31635)这是该向量到LSTM层的输入。我的词汇表中最长的单词是305单词,每个TFIDF向量都有长度31635,因为语料库中的总词汇表有这么多单词。

每一个都是 form15637 sentencesTFIDF向量(31635, )

我使用的是 TFIDF 而不是预训练的embedding层。

No_of_sentences = 15637

BATCH_SIZE = 64

steps_per_epoch = 15637/64 = 244 (with remainder dropped)

vocab_inp_size = 31635. #These were tokens created by Keras tokenizer. and are the distinct words in the input corpus

vocab_tar_size = 4. #This is One-Hot encoding of target value.

下面的代码首先创建tensor slices,然后批处理tensor slices,最后enumerates每个batch都给出一个tuple表单:(batch, (input_tensor, target_tensor))

问题:

我没有使用预训练的嵌入层——而是每个句子的 TFIDF 向量。我不会从输入中删除停用词 - 因此 TFIDF 会降低语料库中过于频繁的任何词的权重。

假设我只使用由 keras 标记器创建的标记(而不是像上面解释的那样对句子使用 TFIDF 向量)。从理论上讲,这是一个不错的选择..你怎么看?

注意:31635 是语料库的大小(所有句子中的单词数)。所以每个句子的长度为 31635,但它大部分是稀疏的(填充),因为我输入的最长句子大约是 300 个单词。

0 投票
0 回答
39 浏览

nlp - Transformer 解码器和带有注意力的堆叠 RNN 有多相似?

Transformer 和 RNN 在序列建模中都非常有用。但是,既然RNNs可以堆叠,可以使用attention机制,那么这种不是很像解码器transformer模型(比如GPT)吗?

两者都有多个堆叠的单向层,以处理序列并注意先前的隐藏状态。一个主要区别是 RNN 的隐藏状态取决于之前的隐藏状态,但如果 R​​NN 使用学习的 Query-Key-Value 矩阵,它们看起来都相似。

有人可以解释是否存在更大的差异,或者在某些情况下它们是否确实相同?

ps:这是关于仅解码器的架构

0 投票
0 回答
19 浏览

python - 在 LSTM 中预测当前时间步时连接上一个时间步的目标变量

给定一组形状特征,(n, 12, 382) where n is the size of the batch目标变量是二元的。我正在尝试训练 LSTM 模型。

问题的障碍是数据应该在模型中表示的方式。最初,我有形状的特征(比如一个样本)(1, X, 382) where X is in the range of [1,12]。示例:(1, 5, 382) 和手头问题的性质如下:

因此,我的目标变成为所有时间步创建级联形式的样本,即 (X,y):

尽管我已经看到人们在 LSTM 的每个学习材料中使用滞后特征,但我的问题与时间索引和预测并不完全相关。想法是学习seq并预测下一个seq。

这样做时,我想添加第 383 个特征,即was_one包含目标的值,但直到当前时间步长,而当前时间步长包含填充值(例如 -999)。

例子:

有了这个功能,我的模型的 AUC 大约是 0.72,在删除这个功能后,它下降到 ~0.65。

问题:

  1. 只是好奇通过像我提出的滞后形式中的功能这样的目标是否合法?还是我在某种意义上传递了未来的信息!
  2. 填充当前时间步长(被预测)的方法是否有效was_one-999如果没有,请提出另一种方法!
0 投票
0 回答
593 浏览

pytorch - 如何在 Pytorch 中实现 Bi-Directional Conv LSTM

我在 Pytorch 论坛https://discuss.pytorch.org/t/passing-hidden-layers-to-convlstm/52814中找到了这个, 这是我在 Pytorch 中为 Bi-Directional Conv LSTM 找到的实现。在浏览完代码后,我一直试图对其进行测试,但似乎有些函数定义错误或不完整。我在这里https://github.com/ndrplz/ConvLSTM_pytorch也找到了 Conv LSTM 的其他实现,但这不支持双向。我需要一些帮助来重新升级上面的代码。

TypeError: initialize_weights() missing 1 required positional argument: 'layer'

0 投票
0 回答
40 浏览

python-3.x - 准备两个并行的 LSTM 模型并将结果馈送到 Keras 建模中的第三个模型

我有一个时间序列,如下所示:

我正在尝试准备一个如下图所示的模型:

建议模型

我在密集层中添加输入 Y1 和 (t1-t2) 时遇到问题。我不确定我该怎么做。我的意图是让两个 LSTM 从不同时间的时间序列值中学习,然后使用该学习与过去的 Y 值来预测未来的 Y 值。我还将展示从过去的 Y 值到现在的时间差。到目前为止,我提出的建模代码如下所示: