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

tensorflow - ValueError:lstm_3 层需要 35 个输入,但它接收到 3 个输入张量

我正在尝试构建一个序列到序列编码器解码器网络以进行语言翻译(英语到法语),我使用三个带有 dropout 的 BLSTM 层作为编码器和一个 LSTM 解码器。

对于模型和拟合是好的,但我在推理模型中不断出错。

错误说:

这是我的模型:

这是我的推理模式:

对于优化器rmsprop和损失

最后对于 val_loss 和 val_accury 在 57 个 epochs 后我得到了这个结果:

0 投票
0 回答
46 浏览

machine-learning - 解码器中的编码器 = LSTM(128)(encoder) 是隐藏状态还是解码器的输入?

这是一个示例代码:

现在,是encoder处于隐藏状态还是解码器decoder = LSTM(128)(encoder)输入

如果它是隐藏状态,那么encoder = LSTM(128)(inputs)这里的输入也将作为隐藏状态传递,当我们希望它作为输入传递给编码器而不是隐藏状态时。

如果它是输入,那么模型将是错误的,因为我们希望它成为解码器的隐藏状态,但是所有人都使用示例代码中显示的相同代码并且它可以工作!

0 投票
1 回答
419 浏览

machine-learning - 为什么我的注意力模型比非注意力模型差

我的任务是将英语句子转换为德语句子。我首先使用普通的编码器-解码器网络进行此操作,在该网络上我得到了相当不错的结果。然后,我尝试使用与以前相同的模型来解决相同的任务,但其中包含Bahdanau Attention。而且,没有注意力的模型优于有注意力的模型。

模型在没有注意力的情况下的损失在 5 个时期内从大约 8.0 下降到 1.4,在 10 个时期内下降到 1.0,损失仍在减少,但速度较慢。

在 5 个 epoch 内,模型的注意力损失从大约 8.0 下降到 2.6,并且没有学到更多东西。

没有一个模型过拟合,因为这两个模型的验证损失也在减少。

每个英文句子有 47 个单词(填充后),每个德语句子有 54 个单词(填充后)。我在训练集中有 7000 个英语句子和 7000 个德语句子,在验证集中有 3000 个句子。

我尝试了几乎所有方法,例如:不同的学习率、不同的优化器、不同的批量大小、我在模型中使用的不同激活函数、尝试应用批量和层归一化,以及编码器和解码器的 LSTM 单元数量不同,但没有什么区别,除了归一化和增加数据,其中损失下降到大约 1.5,但随后再次停止学习!

为什么会这样?为什么有 Bahdanau 注意力的模型失败了,而没有任何注意力的模型表现良好?

编辑 1 - 我尝试在注意力之前、注意力之后以及注意力前后都应用 LayerNormalization。每种情况下的结果大致相同。但是,这一次,损失在 5 个 epoch 内从大约 8.0 变为 2.1,并且再次没有学到太多东西。但是大部分学习是在 1 个 epoch 中完成的,因为在 1 个 epoch 结束时它达到了大约 2.6 的损失,然后在下一个 epoch 达到 2.1,然后又没有学到太多东西。

尽管如此,没有任何注意力的模型优于同时具有注意力和 LayerNormzalization 的模型。这可能是什么原因?我得到的结果有可能吗?一个没有任何归一化、没有任何 dropout 层的普通编码器-解码器网络如何比具有注意力和 LayerNormalization 的模型表现得更好?

编辑 2 - 我尝试增加数据(我做了 7 倍以上的数据),这一次,两个模型的性能都提高了很多。但是,没有注意力的模型仍然比有注意力的模型表现得更好。为什么会这样?

编辑 3 - 我尝试通过首先从整个训练数据集中传递一个样本来调试模型。损失从大约 9.0 开始,并在 0 处减少并收敛。然后,我尝试通过 2 个样本,损失再次从大约 9.0 开始,但是这一次,它只是在前 400 个时期的 1.5 和 2.0 之间徘徊,并且然后慢慢减少。这是我只用 2 个样本训练它时损失如何减少的图:

在此处输入图像描述

这是我只用 1 个样本训练它时损失如何减少的图:

在此处输入图像描述

0 投票
3 回答
381 浏览

tensorflow - 在使用 MaxPoolingWithArgmax2D 和 MaxUnpooling2D 实现 SEGNET 时出现错误

我正在 python 中实现 SEGNET 分段网络,但出现以下错误,

_Traceback(最近一次调用最后):文件“/scratch/pkasar.dbatu/training/NEW_SEGNET_updated_on_16_11_20.py”,第 370 行,在 model=segnet(input_shape=(256,256,3),n_labels=1) 文件“/scratch/pkasar .dbatu/training/NEW_SEGNET_updated_on_16_11_20.py”,第 161 行,在 segnet conv_14 = Convolution2D(512, (kernel, kernel), padding="same")(unpool_1) 文件“/home/pkasar.dbatu/.conda/envs/ dl/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py”,第 897 行,调用 self._maybe_build(inputs) 文件“/home/pkasar.dbatu/.conda/envs/ dl/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py",第 2416 行,在 _maybe_build self.build(input_shapes) # pylint:disable=not-callable File "/home/pkasar .dbtu/.conda/envs/dl/lib/python3。7/site-packages/tensorflow/python/keras/layers/convolutional.py”,第 153 行,在 build input_channel = self._get_input_channel(input_shape) 文件“/home/pkasar.dbatu/.conda/envs/dl/lib/ python3.7/site-packages/tensorflow/python/keras/layers/convolutional.py",第293行,在get_input_channel raise ValueError('The channel dimension of the inputs' ValueError: The channel dimension of the inputs should be defined. 发现没有任何。

TensorFlow图像是:- tensorflow 2.2.0 tensorflow-gpu 2.2.0 keras-base 2.4.3 keras-gpu 2.4.3 python 3.7.9 请帮帮我提前谢谢

代码片段如下:-

0 投票
2 回答
109 浏览

scikit-learn - 生成通用句子编码器嵌入维度时出错

下面是生成嵌入和降维的代码:

当我在 100 000 条记录上运行时,它会引发错误:

0 投票
1 回答
287 浏览

keras - 用于轨迹预测的编码器-解码器

我需要使用编码器-解码器结构来预测 2D 轨迹。由于几乎所有可用的教程都与 NLP(带有稀疏向量)相关,因此我不确定如何使解决方案适应连续数据。

除了我对序列到序列模型的无知之外,embedding单词处理更让我感到困惑。我有一个由 3,000,000 个样本组成的数据集,每个样本的x-y坐标为 (-1, 1) 和125观测值,这意味着每个样本的形状是(125, 2). 我以为我可以将其视为 125 个单词,其中包含 2 维已经嵌入的单词,但本Keras 教程中的编码器和解码器期望 3D 数组为(num_pairs, max_english_sentence_length, num_english_characters).

我怀疑我需要(125, 2)用这个模型单独训练每个样本,就像谷歌的搜索栏只写一个单词一样。

据我了解,编码器是many-to-one类型模型,解码器是one-to-many类型模型。我需要将内存状态c和隐藏状态h作为向量(?)。然后我应该使用这些向量作为解码器的输入,并提取与编码器输出一样多的 (x,y) 形状的预测。

如果有人能在我的数据集的形状上给出一个编码器 - 解码器 LSTM 架构的例子,我将非常感激,特别是在编码器 - 解码器输入和输出所需的维度方面,如果可能的话,特别是在 Keras 模型上。

0 投票
1 回答
477 浏览

tensorflow - 如何训练编码器-解码器模型?

我不太了解用于训练 LSTM 编码器-解码器的明显(或实际上相同?)训练程序。

一方面,在教程中,他们使用 for 循环进行训练: https ://www.tensorflow.org/tutorials/text/nmt_with_attention#training

但在这里 https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html

(第一个模型)

只使用一个简单的

在这里,两个程序都说,他们正在通过教师强制方法进行培训。

但我不明白为什么两种方式都是一样的?

为什么我可以在没有 for 循环的情况下像普通模型训练一样训练编码器解码器,尽管我需要上一个解码步骤来训练下一个解码步骤?

0 投票
0 回答
57 浏览

validation - 我们如何解释下面的验证损失?

我在 CNN+LSTM 编码器和解码器模型中训练了不同数量的层,并注意。我面临的问题对我来说很奇怪。验证损失在 3.*** 左右波动。从下面的损失图中我们可以看出。我在编码器有3 个 CNN 层 + 1 层 BLSTM,在解码器有 1 个 LSTM

3层CNN+2层BLSTM编码器和1层LSTM编码器

我还尝试了从 0.1 到 0.000001 的重量衰减。但我仍然得到这种类型的损失图。请注意,模型的准确性在验证和训练集上都在增加。验证损失怎么可能仍然在 3 左右,但准确性却在提高?有人可以解释一下吗?

谢谢`类编码器(nn.Module):def init(self,height,width,enc_hid_dim,dec_hid_dim,dropout):super()。init () self.height=height self.enc_hid_dim=enc_hid_dim self.width=width

类解码器(nn.Module):def init(self,output_dim,emb_dim,enc_hid_dim,dec_hid_dim,dropout,attention):super()。初始化()

`

0 投票
1 回答
86 浏览

python-3.x - 使用 Keras /Tensorflow 解释具有用于文本摘要的注意力模型的 LSTM 编码器-解码器中的 model.fit

在使用 Keras 进行深度学习时,我通常会遇到这样的 model.fit:

而在 NLP 任务中,我看到了一些关于使用 LSTM 编码器-解码器和注意力模型进行文本摘要的文章,我通常会遇到这个代码来拟合我无法理解的模型:

而且我没有找到任何解释为什么要这样做。有人可以对上述代码进行解释。上述代码可在https://www.analyticsvidhya.com/blog/2019/06/comprehensive-guide-text-summarization-using-deep-learning-python/找到

请注意:我已经联系了写这篇文章的人,但没有得到他的回复。

0 投票
1 回答
1519 浏览

pytorch - Pytorch 变压器前向函数屏蔽解码器前向函数的实现

我正在尝试使用和学习带有 DeepMind 数学数据集的 PyTorch Transformer。我已经将输入模型的标记化(字符而不是单词)序列。模型前向功能对编码器进行一次前向,对解码器进行多次前向(直到所有批量输出都达到令牌,这仍然是 TODO)。我正在努力使用 Transformer 掩码和解码器转发,因为它会引发错误:

源是 N = 32,S = 50,E = 512。目标是 N = 32,S = 3,E = 512。我可能有错误的掩码实现,或者源和目标长度不同,不太确定.

谁能指出我在哪里犯了错误?