问题标签 [seq2seq]

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 回答
7344 浏览

neural-network - Keras 中的 Seq2Seq 双向编码器解码器

我正在尝试使用 Keras 实现一个 seq2seq 编码器-解码器,在编码器上使用双向 lstm,如下所示:

这是我在最后一行遇到的以下错误:

有任何想法吗?

0 投票
3 回答
6565 浏览

deep-learning - 我们为什么要做批量矩阵-矩阵乘积?

我正在关注Pytorch seq2seq 教程,它torch.bmm的使用方法如下:

我理解为什么我们需要将注意力权重和编码器输出相乘。

我不太明白的是我们bmm在这里需要方法的原因。 torch.bmm文件说

执行存储在 batch1 和 batch2 中的矩阵的批处理矩阵乘积。

batch1 和 batch2 必须是 3-D 张量,每个张量都包含相同数量的矩阵。

如果batch1是(b×n×m)张量,batch2是(b×m×p)张量,out是(b×n×p)张量。

在此处输入图像描述

0 投票
1 回答
503 浏览

deep-learning - pytorch seq2seq 编码器正向方法

我正在关注Pytorch seq2seq 教程,下面是他们如何定义编码器函数。

但是,似乎forward在训练期间从未真正调用方法。

以下是本教程中如何使用编码器转发方法:

它不应该是encoder.forward而不是只是encoder?Pytorch 中是否有一些我不知道的自动“前进”机制?

0 投票
0 回答
824 浏览

keras - 带 seq2seq LSTM 的多步时间序列预测

我正在尝试使用带有 LSTM 层的编码器/解码器来预测时间序列数据。到目前为止,我正在使用 20 个过去的数据点来预测 20 个未来的点。对于过去 20 个数据点的每个样本,预测序列中的第一个值非常接近每个序列中的真实第一个值:预测未来 1 步

但是,对于每个序列中的第二个值(未来 2 个时间步长),预测值看起来像是“移位”:预测未来 2 个时间步长

这种“偏移”性质对于预测序列的所有值都是正确的,随着我深入预测序列,偏移会增加。这是我的模型的代码:

与RepeatVector有关吗?任何帮助,将不胜感激。

0 投票
1 回答
251 浏览

python - TensorFlow stack_bidirectional_dynamic_rnn 的维度问题

我正在使用 Tensorflow 构建一个用于机器翻译的玩具编码器-解码器模型。

我使用 Tensorflow 1.8.0 cpu 版本。嵌入层使用了 300 维的 FastText 预训练词向量。然后这批训练数据通过具有注意力机制的编码器和解码器。在训练阶段解码器使用 TrainHelper,在推理阶段使用 GreedyEmbeddingHelper。

我已经使用双向 LSTM 编码器成功运行了模型。但是,当我尝试通过使用多层 LSTM 进一步改进我的模型时,就会出现错误。构建训练阶段模型的代码如下:

这里我只展示编码器部分。完整代码和超参数请看我的github:https ://github.com/nkjsy/Neural-Machine-Translation/blob/master/nmt3.ipynb

错误信息是:

我尝试将输入设置为 [forward_cell] 和 [backward_cell] 并没有问题,这意味着我之前所做的只有 1 层。一旦我添加更多层,就会出现问题。

0 投票
2 回答
4221 浏览

tensorflow - Keras 中带有 LSTM 的多层 Seq2Seq 模型

我在 keras 中制作了一个 seq2seq 模型。我已经构建了单层编码器和解码器,它们工作正常。但现在我想将它扩展到多层编码器和解码器。我正在使用 Keras 功能 API 构建它。

训练:-

编码器代码:-

解码器代码:-

用于检测 :-

现在,当我尝试增加编号时。解码器中用于训练的层数,然后训练工作正常,但对于测试它不起作用并引发错误。

实际上问题在于,当我把它变成多层时,我已经把它转移initial_state到了一个中间层,这个中间层曾经在最后指定。所以当我在测试期间调用它时,它会抛出错误。

我应该如何传递initial_state=decoder_states_input输入层的 which 才不会引发错误。initial_state=decoder_states_input我应该如何为第一个输入层传递最后层?

编辑:-

在该代码中,我尝试制作多层解码器 LSTM。但这会出错。使用单层时。正确的代码是:-

编码器(培训):-

解码器(培训):-

解码器(测试)

0 投票
1 回答
1165 浏览

tensorflow - 为什么我们在张量流中输入 seq2seq 模型时要反转输入(tf.reverse(inputs,[-1]))

为什么我们在tensorflow(tf.reverse(inputs,[-1])) 中输入seq2seq模型时要反转输入

0 投票
1 回答
161 浏览

python-3.x - Seq2seq 用于非句子、浮点数据;卡在配置解码器

我正在尝试将序列到序列建模应用于 EEG 数据。编码工作得很好,但让解码工作被证明是有问题的。输入数据的形状None为 ×3000×31,其中第二维是序列长度。

编码器如下所示:

我使用 RNN 的最终状态作为解码器的初始状态。对于培训,我使用TrainingHelper

当我尝试实施推理时,我的麻烦就开始了。由于我使用的是非句子数据,我不需要标记或嵌入,因为数据本质上已经嵌入。这InferenceHelper门课似乎是实现我的目标的最佳方式。所以这就是我使用的。我会给出我的代码然后解释我的问题。

问题

我不知道输入的形状应该是什么。我知道开始输入应该为零,因为它是第一个时间步。但这会引发错误;它期望输入为(1,32).

我还认为我应该将每个时间步的输出不变地传递给下一个。但是,这会在运行时引发问题:批量大小不同,因此形状是局部的。库在尝试将 转换为张量时抛出异常start_input

有任何想法吗?

0 投票
0 回答
429 浏览

python - Pytorch拼写检查字符RNN不输出结束标记

我正在尝试实现字符 RNN 以进行拼写纠正和标记化。该模型基于 seq2seq 模型的实际 pytorch GRU-RNN 实现-损失函数像他们在这里使用的一样是掩蔽的交叉熵,我正在为我的编码器/解码器使用 2 层双向 GRU。我还使用了教师强制比率为 0.5 的计划抽样。

我遇到的问题是系统正在努力输出结束令牌。诸如“do3s t4is w0rk”之类的句子被正确地更改为“是否有效”,但随后会输出随机令牌,直到系统达到其最大输出长度或看似随机放下 EOS 令牌,从而使输出类似于“does”这个工作kkkkk orwk EOS'。

有人对这个问题有任何见解吗?我尝试揭露我的损失函数,但这导致系统现在输出 PAD 令牌。该系统能够过度拟合非常简单的集合,因此我认为训练中没有错误。任何输入将不胜感激!

0 投票
1 回答
634 浏览

tensorflow - seq2seq 模型的预处理

我正在尝试构建一个 seq2seq 模型,我尝试遵循 Tensorflow 官方教程,但没有提到预处理步骤。我尝试在网上搜索,每个教程都从模型开始,没有预处理步骤信息。

我需要一些有关 seq2seq 中涉及的预处理步骤的信息:

如果我有这样的数据集:(用 index2word 词汇编码后)

如果我将 5 作为批量大小,那么第一批:

现在,在阅读了许多文章后,我发现有四个特殊的令牌必须用于编码数据:

<PAD>:在训练期间,我们需要将我们的示例分批输入网络。

<EOS>:这也是批处理的另一个必要性,但更多的是在解码器方面。它允许我们告诉解码器句子在哪里结束,它也允许解码器在其输出中指示相同的内容。

<UNK>: 将未知替换为 .

<GO>:这是解码器第一个时间步的输入,让解码器知道何时开始生成输出。

现在,如果我以我的批处理示例为例,那么我在填充后有问题:

编码器批次应该与解码器批次的大小相同吗?

如果我的填充编码器数据批次看起来像:

现在我应该将我的解码器序列长度填充到相同的大小吗?(最大 10 ?)或者我应该像这样使用解码器最大序列(最大 12)填充:

以及我最后一个预处理数据的样子:

这是正确的格式吗?