问题标签 [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.
tensorflow - 我们使用填充使序列长度相同还有其他原因吗?
我们使用填充使序列长度相同的长度还有其他原因吗?除了为了做矩阵乘法(因此做并行计算)。
deep-learning - 基于变压器的解码
变压器模型中的解码器可以像编码器一样并行化吗?据我了解,编码器具有序列中的所有标记来计算自注意力分数。但是对于解码器来说,这是不可能的(在训练和测试中),因为自我注意力是根据之前的时间步输出计算的。即使我们考虑使用诸如teacher forcing之类的技术,我们将预期输出与得到的输出连接起来,这仍然具有来自前一个时间步的顺序输入。在这种情况下,除了在捕获长期依赖关系方面的改进之外,在纯粹基于并行化进行比较时,使用转换器解码器是否比使用 lstm 更好?
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:上面的问题,应该如何创建测试集?
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)
所以,我的主要问题来了:
如果我将此数据大小输入 LSTM 模型 nn.LSTM(N, hidden_size),LSTM 模型是否已经在整个批次中进行递归前馈?
我也对 seq_len 感到困惑,当 seq_len>1 时,输出会得到 seq_len 的维度。这是否意味着输出包含序列的递归操作?
我不确定我是否把问题说清楚了,但是我的理解变得很混乱..lol 希望有人可以帮助我组织正确的理解。
python - 如何使用具有固定长度数据的 Keras 进行序列到序列模型 (RNN / LSTM)?
我想做的事情看起来很简单,但我在网上找不到任何例子。首先,我不是在使用语言工作,所以所有这些都给embedding
我的任务增加了不必要的复杂性。
我有输入,以(1, 1000)
向量的形式。它们是时间序列数据,所以我将按顺序排列其中的 10 个。如果我正确理解张量,哪一个给了我一些形状(10, 1, 1000)
,对吧?
我想通过 RNN/LSTM 传递它,输出也应该是相同的形状(10, 1, 1000)
。即,10 个向量,每个向量 1000 维。
python - TF-IDF 向量与标记向量
一些背景:
我将数据结构化为形状的 TFIDF 向量,(15637, 31635)
这是该向量到LSTM
层的输入。我的词汇表中最长的单词是305
单词,每个TFIDF
向量都有长度31635
,因为语料库中的总词汇表有这么多单词。
每一个都是 form15637 sentences
的TFIDF
向量(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 个单词。
nlp - Transformer 解码器和带有注意力的堆叠 RNN 有多相似?
Transformer 和 RNN 在序列建模中都非常有用。但是,既然RNNs可以堆叠,可以使用attention机制,那么这种不是很像解码器transformer模型(比如GPT)吗?
两者都有多个堆叠的单向层,以处理序列并注意先前的隐藏状态。一个主要区别是 RNN 的隐藏状态取决于之前的隐藏状态,但如果 RNN 使用学习的 Query-Key-Value 矩阵,它们看起来都相似。
有人可以解释是否存在更大的差异,或者在某些情况下它们是否确实相同?
ps:这是关于仅解码器的架构
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。
问题:
- 只是好奇通过像我提出的滞后形式中的功能这样的目标是否合法?还是我在某种意义上传递了未来的信息!
- 填充当前时间步长(被预测)的方法是否有效
was_one
?-999
如果没有,请提出另一种方法!
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'