问题标签 [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.
tensorflow - Tensorflow - Seq2Seq 模型权重未正确加载
我正在开发一个encoder-decoder
聊天机器人,它由解码器顶部的一个embedding layer
、两层LSTM
和一个组成。fully connected layer
加载后checkpoint file
,loss
它比我上次保存模型时要高得多,而且聊天机器人的结果正如预期的那样更糟。然而,模型并没有回到他的初始状态。这意味着如果我在模型损失 2.4 时保存模型,它将加载 4-5 损失而不是 10(这是模型开始学习之前的损失)。
此外,模型在加载权重后学习得更快,这让我相信有些权重已经成功加载,而有些则没有。
我正在使用此代码构建模型并checkpoint
在__init__
函数中加载:
这就是我在__build_model
函数中构建模型的方式:
我在训练时使用这个函数来保存权重:
python - InvalidArgumentError:收到的标签值 8825 超出 [0, 8825) SEQ2SEQ 模型的有效范围
我一直在尝试使用 Udemy 课程中名为 DeepLearning_NLP_Chatbot 的 Seq2Seq 模型构建 RNN,我一步一步跟着他,但在训练时遇到错误: InvalidArgumentError : Received a label value of 8825 which is outside the valid range of [0, 8825)。这里的数据集。
这是数据处理数据集
这是构建 seq2seq 模型:
这是培训:
如果您对此错误有意见,不胜感激。:)
tensorflow - attention_layer_size 有什么用?
我正在按照代码学习 seq2seq API。我无法弄清楚该attention_layer_size
参数的用途以及为什么将其设置为num_units/2
keras - 在 PyTorch 中准备序列到序列网络的解码器
我在 Pytorch 中使用序列到序列模型。序列到序列模型由编码器和解码器组成。
编码器转换一个(batch_size X input_features X num_of_one_hot_encoded_classes) -> (batch_size X input_features X hidden_size)
解码器将获取这个输入序列并将其转换为(batch_size X output_features X num_of_one_hot_encoded_classes)
一个例子就像 -
所以在上面的例子中,我需要将 22 个输入特征转换为 10 个输出特征。在 Keras 中,可以使用 RepeatVector(10) 来完成。
一个例子 -
虽然,我不确定这是否是将输入序列转换为输出序列的正确方法。
所以,我的问题是——
- 将输入序列转换为输出序列的标准方法是什么。例如。从 (batch_size, 22, 98) -> (batch_size, 10, 98) 转换?或者我应该如何准备解码器?
编码器代码片段(用 Pytorch 编写) -
keras - Keras seq2seq 堆叠层
在教程中:https : //blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html 我们有一层 seq2seq 模型。我想扩展这个模型,在编码器侧增加一层,在解码器侧增加一层。训练似乎正在发挥作用,但是我无法在多层正确的推理设置中获得解码器。这是我对教程中提到的模型的更改。
编码器:
解码器:
推理(这是我不知道如何创建具有多层的解码器的部分)当前不起作用的实现如下:
谢谢
python - Seq2Seq 模型学会在几次迭代后只输出 EOS 令牌 (<\s>)
我正在使用NMT创建一个在康奈尔电影对话语料库上训练的聊天机器人。
我的代码部分来自https://github.com/bshao001/ChatLearner和https://github.com/chiphuyen/stanford-tensorflow-tutorials/tree/master/assignments/chatbot
在训练过程中,我打印了一个从批次中馈送到解码器的随机输出答案,以及我的模型预测的相应答案,以观察学习进度。
我的问题:仅经过大约 4 次训练迭代后,模型就学会了<\s>
为每个时间步输出 EOS 令牌 ( )。即使在训练继续进行时,它也始终将其输出为响应(使用 logits 的 argmax 确定)。偶尔,很少,模型会输出一系列周期作为其答案。
我还在训练期间打印了前 10 个 logit 值(不仅仅是 argmax),以查看其中是否存在正确的单词,但它似乎是在预测词汇中最常见的单词(例如 i、you、?、. )。即使是这些前 10 个单词在训练期间也没有太大变化。
我已确保正确计算编码器和解码器的输入序列长度,并<s>
相应地添加了 SOS ( ) 和 EOS(也用于填充)标记。我还在损失计算中执行掩蔽。
这是一个示例输出:
训练迭代1:
...
训练迭代 4:
经过几次迭代后,它决定只预测 EOS(很少有一些时期)
我不确定是什么导致了这个问题,并且已经坚持了一段时间。任何帮助将不胜感激!
更新:我让它训练了十万次迭代,它仍然只输出 EOS(和偶尔的周期)。几次迭代后,训练损失也没有减少(从一开始就保持在 47 左右)
python - 如何在 rnn、tensorflow 中制作解码器,提供先前的输出
我想知道如何在 tensorflow rnn 中制作解码器,将它的第 i 个输出馈送到第 (i+1) 个输入
我的输入有 20 个序列和 3680 个 dementions,我的输出有 39 个序列和 3680 个 dementions 所有数据都是 0~1 数字
这是我的模型
我如何制作将先前输出馈送到下一个输入的解码器模型?
附言
我像这样制作我的自我回答代码
我认为这段代码的输出与上面代码的输出不同,但我不确定它是否正常工作。
所以我仍然想知道如何使用tensorflow方法制作具有循环函数((i)输出->(i + 1)输入)的解码器,因为它比上层代码需要更多的内存分配。(在我看来它具有相同的细胞计数)
keras - 嵌入版本 seq2seq 模型(Keras)
我想通过修改 keras github 上的示例来建立一个嵌入版本的 seq2seq 模型。 https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py
我已经尝试过 np.reshape 但它不起作用。
但是,我收到以下错误消息,有人可以帮助我吗?非常感谢!
ValueError:检查输入时出错:预期 Encoder_input 具有 2 维,但得到的数组具有形状(4999、53、3132)