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

python - Tensorflow:注意力输出与下一个解码器输入连接,导致 seq2seq 模型中的维度不匹配

[TF 1.8] 我正在尝试为玩具聊天机器人构建 seq2seq 模型,以了解 tensorflow 和深度学习。我能够使用采样的 softmax 和波束搜索来训练和运行模型,但随后我尝试使用 tf.contrib.seq2seq.AttentionWrapper 应用 tf.contrib.seq2seq.LuongAttention 我在构建图形时收到以下错误:

这是我的模型:

追溯几行日志,我看到错误发生在这里:

我检查了 LSTM 单元的“h”张量,它的形状为 [batch_size, 128],所以我的猜测是上一个解码步骤的注意力输出与当前编码器的输入连接在一起,使得“输入”具有[batch_size, 256] 的形状,然后将其与 'h' 张量连接以形成 [batch_size, 384] 张量,从而导致此错误。

我的问题是:注意力输出不应该与下一个解码器的输入连接,还是我错过了任何理解?以及如何解决此错误。

0 投票
1 回答
98 浏览

tensorflow - 这个自动编码器是如何工作的?

我正在尝试使用自动编码器来获取时间序列并重建它。我的数据有 10 个长度为 365 和一维的时间序列,回溯窗口为 28 天。Autoencoder 模型基于这个keras 博客. 所以基本上这个模型应该得到一个由 28 个值组成的序列,并尝试将它们重建为结果。正如您在代码中看到的那样,我训练了模型,然后给了它 100 个序列作为测试。然后我尝试绘制每个序列步骤的结果值(见图)。我想看看这 28 个时间步是如何构造的。所以在图片中你可以看到它们每个的 28 个图(蓝线是真实/预期值,橙色线是重建结果)。对于第一个时间步,它总是很糟糕并且几乎是一个恒定值,然后在接下来的时间步中它会变得越来越好,而对于最后一个时间步,它几乎能够重建真实值。这是怎么回事?我希望在所有时间步长上看到相同的模式。您如何解释这些图以及 Autoencoder 在这里的工作方式?

更新:如果我删除 Reshape 线并且只有 RepeatVector 重复 seq_len 次,会有什么区别,如下所示: c = RepeatVector(seq_len, name='inputDecoder')(outEncoder) 。所以在我的情况下,它将重复向量 28 次而不是 2 次。这将如何影响解码器输入?我尝试了它并再次绘制了所有时间步,这次没有一个时间步被正确重建。第一个情节与这里的图片中的第一个情节相同,其余的与图片中的第二个情节几乎相同。我想知道为什么?

在此处输入图像描述

0 投票
0 回答
1204 浏览

deep-learning - 连接来自不同来源的编码器隐藏状态/单元/输出以进行注意力计算 - 问题?

我正在使用 Pytorch 解决 LSTM 编码器-解码器序列到序列预测问题。作为第一步,我想从多元输入预测二维轨迹(轨迹 x,轨迹 y) - 二维或更多(轨迹 x、轨迹 y、速度、旋转等)

我正在关注以下笔记本(链接):

带有注意力的 seq2seq

这里摘录(编码器,解码器,注意):

为了在解码器阶段计算注意力,编码器隐藏状态和编码器输出被输入并使用如下:

我的实际目标是通过添加要馈送到解码器的更多信息来扩展该方法,例如每个输入时间步的图像数据。从技术上讲,我想使用两个(或更多)编码器,一个用于上面链接中的轨迹,另一个用于图像数据(卷积编码器)。

我通过连接由轨迹编码器和卷积编码器(以及单元状态等)产生的嵌入并将连接的张量馈送到解码器来做到这一点。

例如,图像嵌入(256 长度的张量)与轨迹数据嵌入(256 长度的张量)相连接会产生 512 长度的嵌入。

我的问题是:如果我使用来自这些不同来源的级联编码器隐藏状态、级联编码器单元状态和级联编码器输出,而不是来自单个源的隐藏状态、单元格、输出,那么注意力计算是否会出现问题?

使这项工作发生的注意事项或预处理是什么?

非常感谢您提前。

0 投票
1 回答
167 浏览

tensorflow - tf.nn.rnn_cell.GRUCell 建立在 CPU 设备上

我现在正在训练一个 2 层 seq2seq 模型并使用 gru_cell。

Timeline 对象用于获取图中每个节点的执行时间,我发现 GRU_cell(包括 MatMul)内的大多数操作都发生在 CPU 设备上,这使得它非常慢。我安装了tf-1.8的gpu版本。对此有何评论?我在这里错过了什么吗?我猜 tf.variable_scope 有问题,因为我对训练数据使用了不同的存储桶。这就是我在不同bucktes之间重用变量的方式:

执行时间截图

0 投票
1 回答
91 浏览

seq2seq - 在 seq2seq Maluuba 模型中实现注意力机制

您好,我正在尝试增加对简单 Maluuba/qgen-workshop seq2seq 模型的关注,但我无法弄清楚我应该传递到初始状态的正确 batch_size 我试过这个:

它给了我这个错误:

0 投票
1 回答
531 浏览

python-3.x - 在 Tensorflow 中,我不能在动态解码中使用任何 MultiRNNCell 实例,但可以使用单个 RNNCell 实例

我使用 tensorflow 制作了一个 seq2seq 模型,遇到了一个问题,当我在 tf.contrib.seq2seq.dynamic_decode 中使用 MultiRNNCell 时,我的程序会抛出错误。

问题发生在这里:

当我运行此代码时,控制台显示此错误消息:

C:\Users\TopView\AppData\Local\Programs\Python\Python36\python.exe E:/PycharmProject/cikm_transport/CIKM/CIKM/translate_model/train.py WARNING:tensorflow:From C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\rnn.py:417: calling reverse_sequence (from tensorflow.python.ops.array_ops) with seq_dim is deprecated and will be removed in a future version. Instructions for updating: seq_dim is deprecated, use seq_axis instead WARNING:tensorflow:From C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\util\deprecation.py:432: calling reverse_sequence (from tensorflow.python.ops.array_ops) with batch_dim is deprecated and will be removed in a future version. Instructions for updating: batch_dim is deprecated, use batch_axis instead encoder_final_state shpe LSTMStateTuple(c=<tf.Tensor 'encoder/bidirectional_rnn/fw/fw/while/Exit_5:0' shape=(?, 24) dtype=float32>, h=<tf.Tensor 'encoder/bidirectional_rnn/fw/fw/while/Exit_6:0' shape=(?, 24) dtype=float32>) decoder_inputs shape before embedded (128, 10) decoder inputs shape after embedded (128, 10, 5) Traceback (most recent call last): File "E:/PycharmProject/cikm_transport/CIKM/CIKM/translate_model/train.py", line 14, in <module> len(embedding_matrix['embedding'][0])) File "E:\PycharmProject\cikm_transport\CIKM\CIKM\translate_model\model.py", line 109, in __init__ maximum_iterations=self.FLAGS.max_len) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\contrib\seq2seq\python\ops\decoder.py", line 323, in dynamic_decode swap_memory=swap_memory) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3209, in while_loop result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2941, in BuildLoop pred, body, original_loop_vars, loop_vars, shape_invariants) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2878, in _BuildLoop body_result = body(*packed_vars_for_body) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3179, in <lambda> body = lambda i, lv: (i + 1, orig_body(*lv)) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\contrib\seq2seq\python\ops\decoder.py", line 266, in body decoder_finished) = decoder.step(time, inputs, state) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\contrib\seq2seq\python\ops\basic_decoder.py", line 137, in step cell_outputs, cell_state = self._cell(inputs, state) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 232, in __call__ return super(RNNCell, self).__call__(inputs, state) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\layers\base.py", line 329, in __call__ outputs = super(Layer, self).__call__(inputs, *args, **kwargs) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 703, in __call__ outputs = self.call(inputs, *args, **kwargs) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 1325, in call cur_inp, new_state = cell(cur_inp, cur_state) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 339, in __call__ *args, **kwargs) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\layers\base.py", line 329, in __call__ outputs = super(Layer, self).__call__(inputs, *args, **kwargs) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 703, in __call__ outputs = self.call(inputs, *args, **kwargs) File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 846, in call (c_prev, m_prev) = state File "C:\Users\TopView\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 436, in __iter__ "Tensor objects are not iterable when eager execution is not " TypeError: Tensor objects are not iterable when eager execution is not enabled. To iterate over this tensor use tf.map_fn.

Process finished with exit code 1

但是,当我更改 的实例defw_rnn,使其成为像 LSTMCell 这样的单个 RNN 实例时,错误消失了:

并且代码运行良好。但是,我发现互联网上大多数关于 seq2seq 模型的代码都使用 MultiRNNCell 并且他们也使用 tensorflow,所以我真的很困惑我的程序有什么问题。

这是整个代码:

0 投票
1 回答
58 浏览

tensorflow - 恢复保存的训练变量后,保存的 tensorflow NLP 模型不输出任何内容

在受到 github repo 的启发后,我为聊天机器人构建了一个 seq2seq 模型。为了训练聊天机器人,我使用了我的 Facebook 聊天记录。因为我的大部分聊天都像是用英语写的印地语单词。我必须从头开始训练词嵌入。我知道该模型将需要大约 30-40 小时(500000 次批量大小为 24 的迭代)在 cpu 上进行训练。所以,我学会了使用

tf.train.saver()

方法来保存变量并在将来恢复它们。

为了查看我的模型的进度,我制作了模型以在每 250 次迭代时输出五个输入文本序列的回复。在培训开始时,我得到了空白输出(因为令牌是最常见的)。但经过几千次迭代后,它开始给出最常见的单词作为输出。经过 90,000 次迭代后,它给出了一些不合逻辑但不同类型的输出。所以,我停止了那里的训练。

现在,当我从最新的检查点恢复变量时。我再次得到空行作为输出。这是正常行为还是我的代码中存在某种错误。

代码: 完整代码

代码片段:(从最新检查点恢复的代码)

(在迭代循环中保存变量的代码)

0 投票
0 回答
190 浏览

python - Tensorflow Beamsearch 解码器无法解码值

我正在尝试使用带有 Beam Search 和 Attention 的 Tensorflow 编写 seq2seq 示例。到目前为止,我还没有找到具体的例子来解释使用当前 tf 版本的解码和/或注意力。

之前的版本都存在波束搜索解码器的问题,它会告诉您执行 batch_tile。

我有一个简单解码器示例的工作示例,暂时还可以,但我想使用 Beam Search

我收到此错误

我相信 beam_width 正在添加额外的维度,这会改变张量的等级,因为代码在没有带有 BasicDecoder 的 BeamSearch 的情况下工作。如果我设置 beam_size =1 (有趣的缘故)它会抛出这个错误

如果有人能帮我解决这个错误,我会很高兴。如果我设置

0 投票
1 回答
1547 浏览

python - 在没有教师强制的情况下使用 LSTM 解码器 - Tensorflow

我正在尝试在 Tensorflow 中构建一个序列到序列模型,我已经遵循了几个教程,一切都很好。直到我决定在我的模型中删除教师强迫。下面是我正在使用的解码器网络示例:

据我了解,TrainingHelper 正在强迫教师。尤其是将真实输出作为其参数的一部分。我尝试在没有培训帮助的情况下使用解码器,但这似乎是强制性的。我试图将真实输出设置为 0,但显然 TrainingHelper 需要输出。我也尝试用谷歌搜索解决方案,但没有找到任何相关内容。

===================更新=============

我很抱歉之前没有提到这一点,但我也尝试使用 GreedyEmbeddingHelper。该模型运行良好几次迭代,然后开始抛出运行时错误。似乎 GreedyEmbeddingHelper 开始预测与预期形状不同的输​​出。下面是我使用 GreedyEmbeddingHelper 时的功能

这是经过多次训练迭代后引发的错误示例:

我不确定,但我猜 GreedyEmbeddingHepler 不应该用于训练。,我将感谢您对如何阻止老师强迫的帮助和想法。

谢谢你。

0 投票
1 回答
867 浏览

python - 对 Tensorflow 中的多层双向 RNN 感到困惑

我正在使用 Tensorflow 构建一个多层双向 RNN。不过我对实现有点困惑。

我已经构建了两个创建多层双向 RNN 的函数,第一个可以正常工作,但我不确定它的预测,因为它作为单向多层 RNN 执行。下面是我的实现:

我在这里找到了另一个实现,如下所示:

这个实现的问题是我得到一个形状错误:

似乎其他人在创建 RNN 单元格时也遇到了类似的情况,解决方案是使用 MultiRNNCell 来创建分层单元格。但是如果使用 MultiRNNCell 我将无法使用第二个实现,因为 multiRNNCell 不支持索引。因此,我将无法遍历单元列表并创建多个 RNN。

我非常感谢您在这方面的帮助。

我正在使用张量流 1.3