问题标签 [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 回答
356 浏览

nlp - seq2seq 学习中的解码器是如何调节的?

我正在尝试使用 RNN 理解序列到序列的学习。到目前为止我所理解的是,编码器的输出用于调节解码器。

然而,我有两个来源,在我看来,它们以不同的方式进行调节,我想知道哪种方式是有效的(可能两者都是)或者我是否错过了什么。

资料来源:Yoav Goldberg 的自然语言处理神经网络方法

据我了解作者,解码器在每一步都使用状态向量和解码器输出以及序列的下一部分进行操作。因此,解码器的状态向量与编码器的结果分离。

在此处输入图像描述

资料来源:Francois Chollet 十分钟介绍 Keras 中的序列到序列学习

据我了解作者和来源,解码器提供编码器状态作为初始状态。因此,解码器的状态向量就是解码器的输出。解码器步骤仅取决于通过状态向量的编码器输出。

在此处输入图像描述

0 投票
3 回答
1749 浏览

tensorflow - 如何保存 TensorFlow 编码器解码器模型?

我按照本教程构建了一个编码器-解码器语言翻译模型,并为我的母语构建了一个。

现在我想保存它,部署在云 ML 引擎上并使用 HTTP 请求进行预测。

我找不到有关如何保存此模型的明确示例,

我是 ML 新手,发现TF save guide v 令人困惑..

有没有办法使用tf.keras.models.save_model 之类的东西来保存这个模型

0 投票
1 回答
798 浏览

tensorflow - 如何在 Keras 的两个 LSTM 层之间添加注意力层

我正在尝试在编码器 LSTM(多对多)和解码器 LSTM(多对一)之间添加一个注意层。

但是我的代码似乎只为一个解码器 LSTM 输入创建了注意力层。

如何将注意力层应用于解码器 LSTM 的所有输入?(注意力层的输出 = (None,1440,984) )

这是我模型的注意力层的总结。

这是我的代码

0 投票
0 回答
285 浏览

python - ValueError:尺寸必须相等,但“Attention_0/add”的尺寸必须是 49152 和 64(操作:“Add”)

我想尝试用编码器和注意力解码器替换此 github代码(即 dcrnn_model.py 第 83 行)中的编码和解码器的内容。

这些是编码器-解码器之前的代码:

这是编码器-解码器的原始代码:

我的代码如下:

但是,出现了这样的维度错误:

ValueError:尺寸必须相等,但对于输入形状为 [49152,1,1,207]、[64,1、 1,207]。

0 投票
1 回答
529 浏览

keras - 以下编码器-解码器模型如何生成与输入不同大小的输出?

我在 Keras 中实现了以下教程:

https://towardsdatascience.com/nlp-sequence-to-sequence-networks-part-2-seq2seq-model-encoderdecoder-model-6c22e29fd7e1

在介绍中,作者说该设置非常适合将随机变化大小的输入序列与随机变化大小的输出序列匹配。我很困惑,因为我看不到如何生成与输入句子长度不同的句子输出。

假设输入是英语句子,输出是法语句子,如教程中所示。

我目前的理解如下:

编码器输入是英文句子,作为要嵌入的整数序列。解码器输入是法语句子,作为延迟一个时间步长的整数序列,序列中的第一个整数表示空值。该层也是嵌入的。

目标是将法语句子作为一系列整数,而不是延迟。我似乎需要在末尾添加一个整数来表示字段的结尾,否则大小与解码器嵌入的输入不匹配,keras 会抛出错误。

在进行预测时,你究竟提供了什么?似乎不可能得到与输入不同长度的输出。是这样吗?

0 投票
1 回答
916 浏览

tensorflow - 不能使用 Keras 张量和非 Keras 张量的混合来指定 RNN 层的初始状态或常数

正如我们所知,解码器将编码器隐藏状态作为初始状态......

假设我想将解码器的初始状态替换为 encoder_output 以及来自其他资源的我的特征

但我面临以下错误:

ValueError:RNN 层的初始状态或常量不能用 Keras 张量和非 Keras 张量的混合来指定(“Keras 张量”是由 Keras 层返回的张量,或由Input

虽然我打印了 state_h & stat_c & encoder_output & my_state,但都具有相同的类型和形状,例如:

我理解它不会接受不是从前一层产生的输入,以及作为 Keras 张量的输入?

更新

将张量转换为 Keras 张量后,新错误:

ValueError:模型的输入张量必须来自 keras.layers.Input. 收到:Tensor("Reshape_18:0", shape=(?, 128), dtype=float32) (缺少前一层元数据)。

0 投票
1 回答
897 浏览

tensorflow - 如何在 Keras 中定义 ConvLSTM 编码器解码器?

我已经看到在 Keras 中使用 LSTM 构建编码器-解码器网络的示例,但我想要一个 ConvLSTM 编码器-解码器,并且由于 ConvLSTM2D 不接受任何“initial_state”参数,因此我可以将编码器的初始状态传递给解码器,我尝试在 Keras 中使用 RNN 并尝试将 ConvLSTM2D 作为 RNN 的单元传递,但出现以下错误:

这就是我尝试定义 RNN 单元的方式:

0 投票
1 回答
299 浏览

python-3.x - Keras RNN 编码器-解码器架构输出的维度

我一直无法弄清楚 RNN 编码器-解码器架构的尺寸。我了解 LSTM 的工作原理,但我正在努力在 Keras 中实现这个。在查看文档并阅读问答后,看起来网络输出的维度必须与整个目标集的维度相匹配(而不是特定目标——这没有意义)。我确定我读错了,它需要仅适合给定 xi 的目标尺寸(暂时搁置批次问题)。经过几个小时的摆弄,我更加困惑。我认为我将输入嵌入到 RNN 而不是嵌入输出这一事实可能与此有关,并且我可能需要在此过程中将网络展平。

这是设置:

  • 数据集是大量的问答对。我正在使用 1440 对样本来构建基础设施。
    • xi:“美国的首都是哪里?”
    • 易:“我认为首都是华盛顿”
  • 在 NLP 之后,有两个 numpy 数组——一个用于 X,一个用于 Y。每一行对应于原始数据集中的一行,例如:
    • 已处理 xi: [253, 8, 25, 208, 28, 1]
    • 处理后的 yi: [827, 10, 25, 208, 8, 198]
  • 输入序列有一个嵌入层(使用手套算法),但我认为输出序列没有必要。

这是代码:

这是网络摘要:

这是错误:

其他详情:

  • maxlen:输入和输出序列的最大长度为 95
  • embed_size:词嵌入的维数为100
  • 词汇大小:词汇的大小是4046
0 投票
0 回答
267 浏览

keras - Keras RNN + Encoder/Decoder + Attention 中的图断开连接

我已经使用编码器/解码器结构 + 注意力 + 手套在 Keras 中成功训练了一个模型,下面有几个例子,最值得注意的是这个这个。它基于对机器翻译的修改。这是一个聊天机器人,所以输入是单词,输出也是。但是,我一直在努力正确设置推理(预测),并且无法弄清楚如何通过图形断开连接。我的带有嵌入和注意力的双向 RNN 编码器/解码器训练良好。我试过修改解码器,但觉得有一些明显的东西我没有看到。

这是基本模型:

它看起来像这样: 在此处输入图像描述

这是我遇到麻烦的地方:

这会产生图形断开错误:图形断开连接:无法在“encoder_inputs”层获得张量 Tensor("encoder_inputs_61:0", shape=(?, 1037), dtype=float32) 的值。访问以下先前层没有问题:[]

应该可以进行这样的推理但我无法克服这个错误。我不可能简单地将decoder_output 和attention 加在一起,因为它们的形状不同。

0 投票
1 回答
347 浏览

neural-network - 编码器-解码器 LSTMCell/RNN 网络的输入

我正在使用 Keras 创建一个 LSTM 编码器-解码器网络,遵循此处提供的代码:https ://github.com/LukeTonin/keras-seq-2-seq-signal-prediction 。我所做的唯一更改是将 GRUCell 替换为 LSTMCell。基本上编码器和解码器都包含 2 层,35 个 LSTMCell。这些层使用 RNN 层相互堆叠(并组合)。

LSTMCell 返回 2 个状态,而 GRUCell 返回 1 个状态。这是我遇到错误的地方,因为我不知道如何为 LSTMCell 的 2 个返回状态编码。

我创建了两个模型:第一个是编码器-解码器模型。第二,预测模型。我在编码器-解码器模型中没有遇到任何问题,而是在预测模型的解码器中遇到问题。

我得到的错误是: ValueError: Layer rnn_4 expects 9 inputs, but it received 3 input tensors. Input received: [<tf.Tensor 'input_4:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'input_11:0' shape=(?, 35) dtype=float32>, <tf.Tensor 'input_12:0' shape=(?, 35) dtype=float32>]

当在预测模型中运行下面的这一行时,会发生此错误:

这适合的代码部分是:

有人可以帮我处理上面的 for 循环,然后我应该通过解码器的初始状态吗?