问题标签 [encoder-decoder]

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

tensorflow - 我可以使用`tf.contrib.seq2seq.dynamic_decode`来替换encoder-decoder框架中的函数`tf.nn.dynamic_rnn`吗?

实际上,我想像Alex Grave 所做的那样生成序列。我有张量流的实现。同时,我想尝试基于注意力的 seq2seq 模型来生成笔迹。所以关于解码器,我用它做了tf.nn.dynamic_rnn,它可以工作。现在,我想在 tensorflow 中使用基于注意力的方法,所以我想将其更改为tf.contrib.seq2seq.dynamic_decode. 但我收到以下错误:

TypeError: Cannot convert a list containing a tensor of dtype <dtype: 'int32'> to <dtype: 'float32'> (Tensor is: <tf.Tensor 'vector_rnn/DEC_RNN/transpose_1:0' shape=(100, ?) dtype=int32>)

我检查了他们两个的 API 文档。tf.nn.dynamic tf.contrib.seq2seq.dynamic.decode 关于它们的返回,我没有任何想法解决这个错误。

如果您有任何想法,请告诉我!我会非常感激。

0 投票
0 回答
116 浏览

python - 无法将 LuongAttention 转换为张量或操作

我尝试按照教程https://www.tensorflow.org/tutorials/seq2seq在 tensorflow 中实现编码器-解码器模型 我做了一个简单的编码器-解码器模型

它有效。我想为解码器添加注意力机制。

但是当我跑步时

outs = sess.run(attention_mechanism, feed_dict={ inputs: x, decoder_inputs: y, }) 我得到了错误

TypeError:无法将 LuongAttention 转换为张量或操作。我检查了注意力状态。它是一个形状为 (10, 155, 512) 的张量。p.gru_units 是等于 512 的整数。我不明白什么不能转换成张量。提前致谢。

0 投票
1 回答
180 浏览

machine-learning - 编码器为每个输入 Keras seq2seq 返回相同的状态

我在 Keras 中使用编码器解码器 seq2seq 架构,我正在传递一个单热的形状数组(num_samples、max_sentence_length、max_words)进行训练,并使用教师强制。

对于推理模型:

我尝试打印出 encoder_model 状态,但它总是为任何输入返回相同的状态。任何帮助,将不胜感激!

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 投票
2 回答
749 浏览

python - 尝试在 Keras 中构建编码器-解码器模型时出现图形断开错误

我正在尝试在 Keras 中实现基于下图中的编码器-解码器模型的简化版本(来源:https ://arxiv.org/pdf/1805.07685.pdf )。请注意,此模型中只有一个编码器和解码器,为了清晰起见,它们已在图像中展开。

我现在只关注底部分支,不包括注意力和样式标签 s_i。我一直在关注这个关于 seq2seq 模型的 Keras教程以获得指导。是我定义此模型的脚本。

在此处输入图像描述

训练成功运行,但在推理步骤中出现以下错误。

在推理过程中,我按照教程创建了一个新的编码器和解码器,其权重与训练的相同。但是,我不包括后向传输部分,因为这只是为了训练模型。我猜这是问题的原因,因为在训练期间编码器和解码器几乎是循环链接的,但在推理期间我只想专注于前向传输。

但是我不确定我应该如何解决这个问题。我想也许我应该为前向和后向传输部分创建两个独立的编码器/解码器,并让它们共享权重,但不确定这是否合理。我是 Keras 的初学者,因此非常感谢没有假设的解释。谢谢。

一些可能有帮助的进一步背景:

我正在尝试转移文本的样式。我有两个用于样式 A 和 B 的非平行语料库,因此这是一个无监督问题。这就是为什么在前向传输期间解码器使用时间步 t-1 的输出作为时间步 t 的输入的原因。然而,在反向传输期间,解码器旨在重建原始句子,因此使用地面实况作为输入。因此创建了两个解码器输入层。

更新:

我已经解决了这个特定的错误。事实证明,我在前向传输期间用编码器的输出在反向传输期间覆盖了编码器的输出(self.encoder_states)。后向传输编码器从解码器获取未通过的输入。相反,我打电话给模型(self.encoder_inputs,self.encoder_states)。

在此之后,我想知道我采用的方法是否是实现该模型的最简单方法。有更好的选择吗?

0 投票
1 回答
383 浏览

python - DecoderRNN 的输出包含额外的维度(Pytorch)

我开发了一个编码器(CNN)-解码器(RNN)网络,用于 pytorch 中的图像字幕。解码器网络接收两个输入——来自编码器的上下文特征向量和用于训练的字幕的词嵌入。上下文特征向量的大小 = embed_size,这也是标题中每个单词的嵌入大小。我这里的问题更关心 Class DecoderRNN 的输出。请参考下面的代码。

在前向函数中,我发送一个序列 (batch_size, caption_length+1, embed_size) (concatenated tensor of context feature vector and the embedded caption)。序列的输出应该是标题和形状 (batch_size, caption_length, vocab_size) ,但我仍然收到形状 (batch_size, caption_length +1, vocab_size) 的输出。谁能建议我应该在我的转发功能中改变什么,以便不接收额外的二维?提前致谢

0 投票
0 回答
36 浏览

python - 在每一步解码后重新编码上下文向量?

我目前正在研究一个序列模型,该模型旨在预测未来观看 VR 的人的头部方向任意数量的帧。

使用编码器-解码器范例,一个人的前 100 帧头部方向视频的前 100 帧数据被输入编码器以创建上下文。 (这里 100 是任意的,但为了写作,我将使用 100 帧,所以前一个序列的数据将是 [ T (-100) - T 0 ] )

然后将上下文馈入解码器,并逐帧输出观众将在第一次解码迭代中看到T 1的概率分布,在第二次迭代中看到T 2的概率分布。

因此,上下文向量肩负着很大的责任,对来自整个前一个序列的数据进行编码。所以为了帮助解码器的输出,在解码的每一步我都想让解码器能够访问视频未来的 100 帧数据。因此,在时间 T 2 ,解码器将进行第二次迭代,并可以访问第 102 个视频帧以用于卷积、显着性等。

我们考虑实现这一点的方法是让编码器在每次迭代解码上下文时重新编码上下文向量,并替换编码器的输入以包含未来的视频帧数据

因此,例如在解码的第二次迭代中,我们将重新编码上下文,但将T (-100)的数据替换为T 1的解码输出,并将T (-100)的视频帧替换为视频帧对于T 2。我们将继续以这种方式迭代解码。

想法是,这将是一种向解码器提供有关即将到来的视频的信息的方法,并使用其先前的预测来加强未来运动预测的完整性。阿姆斯特丹大学的 Johannes Baptist 在这篇论文中也提出了这种重新编码上下文的想法,尽管我是一名本科生,对这个领域还很陌生,所以这篇论文很难掌握。

如果有人对在解码的每一步重新编码上下文将对编码器 - 解码器模型产生什么影响有任何直觉,并且可以提供任何见解或资源以继续研究,那就太好了,非常感谢。

0 投票
1 回答
31 浏览

nlp - 确保编码器-解码器文本生成深度学习模型中存在单词/标记/名词

我遇到了一个问题,我想确保在解码和生成抽象风格的句子时生成特定的标记/单词。

我正在使用 LSTM 和 Transformer 模型等深度学习模型来生成短句(100-200 个字符)。我希望在生成的文本中出现一些像地方或名词(如品牌名称)这样的词。

我不确定是否有这方面的研究,经过广泛搜索后,我真的找不到一篇论文。

TIA,任何线索或建议表示赞赏。:)

0 投票
2 回答
554 浏览

python - Keras 编码器-解码器模型 RuntimeError: You must compile your model before using it

我正在尝试重现图像字幕模型的结果,但出现此错误。两种模型的代码如下:

然后由以下代码调用模型:

但是,当fit_generator调用 时,会引发特定错误。模型的串联有什么问题吗?

0 投票
0 回答
313 浏览

python - 如何在 rnn、tensorflow 中制作解码器,提供先前的输出

我想知道如何在 tensorflow rnn 中制作解码器,将它的第 i 个输出馈送到第 (i+1) 个输入

我的输入有 20 个序列和 3680 个 dementions,我的输出有 39 个序列和 3680 个 dementions 所有数据都是 0~1 数字

这是我的模型

我如何制作将先前输出馈送到下一个输入的解码器模型?

附言

我像这样制作我的自我回答代码

我认为这段代码的输出与上面代码的输出不同,但我不确定它是否正常工作。

所以我仍然想知道如何使用tensorflow方法制作具有循环函数((i)输出->(i + 1)输入)的解码器,因为它比上层代码需要更多的内存分配。(在我看来它具有相同的细胞计数)