问题标签 [sequence-to-sequence]
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.
python - 从 csv 中的单独列为 tensorflow 中的 seq2seq 解码器创建输入/输出序列
我正在尝试使用 tensorflow seq2seq ,但我无法想出一种添加“GO”、“EOS”+“PAD”元素标签序列的好方法。我正在使用 tf.TextLineReader 从 .csv 读取这些数据,我创建的 .csv 有一个文本列,然后是每个顺序标签的 4 列。
这是我创建的示例 csv sample_input.csv:“这是我们想要的示例文本消息”,Label1,Label2,Label3,“这是我们要加载的另一个句子”,Label10,,,
这是我在以下位置读取此 csv 的代码:
上面的示例将在 features.eval() 上打印出以下内容:
现在我知道这不是创建这些序列的正确位置,但我希望得到一些关于如何正确创建序列的建议。这些 4 个标签的序列长度不同,有些可能只有 1 个,而另一些可能有 4 个。理想情况下,我的输入最终会是
单标签:
- 解码器输入 = [GO,Label1,PAD,PAD]
- 解码器输出 = [标签 1,结束,垫,垫]
双标:
- 解码器输入 = [GO,Label1,Label2,PAD]
- 解码器输出 = [标签 1,标签 2,结束,垫]
三个标签:
- 解码器输入 = [GO,标签 1,标签 2,标签 3]
- 解码器输出 = [标签 1,标签 2,标签 3,结束]
四个标签:
- 解码器输入 = [GO,标签 1,标签 2,标签 3]
- decoder_output = [Label1, Label2, Label3, Label4] *注意:最后一个没有结束序列,因为它已经有 4 个元素长
任何人都可以提出一种更好的方法来从 csv 中的四个单独的列创建解码器输入/输出吗?
python - 使用 CNTK 在每个生成步骤通过采样生成序列
在具有编码器和解码器的 seq2seq 模型中,在每个生成步骤中,softmax 层都会输出整个词汇表的分布。在 CNTK 中,可以使用 C.hardmax 函数轻松实现贪婪解码器。它看起来像这样。
但是,在每一步我都不想以最大概率输出令牌。相反,我想要一个随机解码器,它根据词汇的概率分布生成一个标记。
我怎样才能做到这一点?任何帮助表示赞赏。谢谢。
python - Keras 究竟如何为 LSTM / 时间序列问题采用维度参数?
对于如何将数据输入 Keras 的问题,我似乎找不到具体的答案。大多数示例似乎都可以处理图像/文本数据,并且具有明确定义的数据点。
我正在尝试将音乐输入 LSTM 神经网络。我希望网络播放约 3 秒的音乐并提名接下来的 2 秒。我将我的音乐准备成 .wav 文件并划分为 5 秒的间隔,我将这些间隔分解为 X(前 3 秒)和 Y(最后两秒)。我以 44,100 赫兹对我的音乐进行了采样,所以我的 X 是 132,300 次“长”观察,而我的 Y 是“88,200”长观察。
但我不知道如何将 Keras 连接到我的数据结构。我正在使用 Tensorflow 后端。
为了概括问题和答案,我将使用 A、B、C 来表示维度。这个示例数据和我的真实数据之间的唯一区别是这些是从 0 到 1 分布的随机值,而我的数据是一个整数数组。
但是,我真的不知道如何配置模型以了解“第一”(A)维度包含观察结果,并且我想或多或少地通过通道(C)分解音乐(B)。
我知道将其转换为单声道(和 2d 问题)可能会更容易,但我很好奇这是否有一个“简单”的解决方案 - 是否主要采用我下面的形式或者我是否应该以另一种方式考虑模型。
主要问题是:我将如何构建一个允许我将 X 数据转换为 Y 数据的模型?
理想情况下,答案将显示如何修改下面的模型以适应上面的数据结构。
但是,这会产生错误(在模型 = ... 步骤):
我不知道 Keras 期望从哪里看到 ndim=4 数据。此外,我不知道如何确保将数据输入模型,以便模型“理解”观察分布在 A 轴上,而数据本身分布在 B 轴和 C 轴上。
如果有任何不清楚的地方,请发表评论。我会一直关注到 17 年 9 月左右,我一定会更新这个问题以反映留下的建议/评论。
谢谢!
tensorflow - 使用 BeamSearchDecoder 时没有名为 GatherTree 的操作
我正在使用 TensorFlow 实现 Seq2Seq 模型。我的代码使用贪心解码器工作,但是当我使用 BeamSearchDecoder 来提高性能时,我遇到了这个错误:
当我使用 infer 模块生成输出时发生此错误:
程序失败于loader = tf.train.import_meta_graph(checkpoint + '.meta')
我不知道我是否正确处理解码器的输出,所以这里是相应的代码:
处理输出:
另外,我在 https://github.com/tensorflow/nmt/blob/77e6c55052ba31a8d733c94bb820d091c8156d35/nmt/model.py的 nmt 模型中发现了一些东西(第 391 行)
这与我的错误有关吗?
提前致谢!
python - Seq2seq pytorch 推理慢
我尝试了 seq2seq 此处提供的 seq2seq pytorch实现。在分析评估(evaluate.py)代码后,需要较长时间的代码是decode_minibatch方法
在 GPU 上训练模型并在 CPU 模式下加载模型进行推理。但不幸的是,每句话似乎都需要大约 10 秒。pytorch 预计会出现缓慢的预测吗?
任何修复,加快速度的建议将不胜感激。谢谢。
machine-learning - 集成模型和平均模型有什么区别?
在机器翻译中,序列到序列模型变得非常流行。他们经常使用一些技巧来提高性能,例如集成或平均一组模型。这里的逻辑是错误将“平均”。
据我了解,平均模型只是取 X 模型参数的平均值,然后创建可用于解码测试数据的单个模型。然而, Ensembling平均每个模型的输出。这需要更多的资源,因为 X 模型必须提供输出,而平均模型仅在测试数据上运行一次。
这里到底有什么区别?输出有何不同?在我的测试中,这两种方法都比基线分数略有提高。这让你想知道如果人们也可以平均的话,为什么还要为合奏而烦恼。然而,在我遇到的所有神经机器翻译论文中,人们谈论的是集成而不是平均。为什么是这样?有没有关于平均的论文(特别是 seq2seq 和机器翻译相关的论文)?
任何帮助是极大的赞赏!
python - 在 CNTK 中实现 Seq2Seq 时的多个轴问题
我正在尝试在 CNTK 中实现一个带有注意力的 Seq2Seq 模型,这与CNTK Tutorial 204非常相似。但是,几个小的差异会导致各种问题和错误消息,我不明白。这里有很多问题,它们可能是相互关联的,并且都源于我不明白的某件事。
注意(如果它很重要)。我的输入数据来自MinibatchSourceFromData
,由适合 RAM 的 NumPy 数组创建,我不将其存储在 CTF 中。
因此,形状是[#, *](input_dim)
和[#, *](label_dim)
。
问题 1:当我运行CNTK 204 教程并使用 将其图形转储到.dot
文件中cntk.logging.plot
时,我看到它的输入形状是[#](-2,)
. 这怎么可能?
- 序列轴(
*
)在哪里消失了? - 维度怎么可能是负数?
问题 2:在同一个教程中,我们有attention_axis = -3
. 我不明白这一点。在我的模型中,有 2 个动态轴和 1 个静态轴,因此“倒数第三个”轴将是#
批处理轴。但是绝对不应该在批处理轴上计算注意力。
我希望查看教程代码中的实际坐标轴可以帮助我理解这一点,但[#](-2,)
上面的问题使这更加混乱。
设置attention_axis
为-2
会出现以下错误:
在创建训练时间模型期间:
其中stab_result
是解码器Stabilizer
最后一层之前的右边。Dense
我可以在点文件中看到,在实现的中间出现了大小为 1 的虚假尾随维度AttentionModel
。
设置attention_axis
为-1
会出现以下错误:
其中 64 是 my attention_dim
, 200 是 my attention_span
。据我了解,*
注意模型中的 elementwise 绝对不应该将这两者混为一谈,因此-1
这里绝对不是正确的轴。
问题3:我上面的理解正确吗?什么应该是右轴,为什么它会导致上述两个异常之一?
感谢您的解释!
tensorflow - 在额外的训练数据上训练训练有素的 seq2seq 模型
我已经用 1M 样本训练了一个 seq2seq 模型并保存了最新的检查点。现在,我有一些额外的 50K 句子对的训练数据,这在以前的训练数据中是没有的。如何在不从头开始训练的情况下使当前模型适应这些新数据?
python - Tensorflow RNN:如何推断没有重复的序列?
我正在研究一个 seq2seq RNN,在给定种子标签的情况下生成标签的输出序列。在推理步骤中,我想生成仅包含唯一标签的序列(即跳过已添加到输出序列中的标签)。为此,我创建了一个采样器对象,该对象尝试记住已添加到输出中的标签并将其 logit 值减小到-np.inf
.
这是采样器代码:
推理图的代码如下所示:
不幸的是,结果仍然有重复的标签。此外,当我尝试访问时,sample_fn.ids_mask
我收到一条错误消息:ValueError: Operation 'inf_decoder/decoder/while/BasicDecoderStep/add_1' has been marked as not fetchable.
我究竟做错了什么?创造这样的东西有多合法sample_fn
?