对于一些自学,我尝试使用Keras实现简单的序列到序列模型。虽然我得到了基本的想法,并且有几个在线可用的教程,但在查看这些教程时我仍然会遇到一些基本概念:
encoder_input_data
,decoder_input_data
,decoder_target_data
说这些确实是针对Seq2Seq的两种不同方法是否正确?哪一个可能更好,为什么?或者我是否错误地阅读了第二篇教程?我已经对序列分类和序列标记有了一定的了解,但是从序列到序列它还没有被正确点击。
答案 0 :(得分:3)
是的,这两种方法不同,也有其他变化。 MachineLearningMastery简化了一些事情以使其可访问。我相信Keras方法可能会表现得更好,如果你想提前注意seq2seq,你需要的是几乎总是如此。
MachineLearningMastery有一个hacky解决方法,允许它在不交换解码器输入的情况下工作。它只是重复最后一个隐藏状态,并将其作为每个时间步的输入传递。这不是一个灵活的解决方案。
model.add(RepeatVector(tar_timesteps))
另一方面,Keras教程还有其他几个概念,如教师强制(使用目标作为解码器的输入),嵌入(缺少)和更长的推理过程,但它应该引起你的注意。
我还建议pytorch tutorial我觉得这是最合适的方法。
修改: 我不知道你的任务,但你想要的字嵌入是什么
x = Embedding(num_encoder_tokens, latent_dim)(encoder_inputs)
在此之前,您需要将词汇表中的每个单词映射为整数,将每个句子转换为整数序列,并将该整数序列传递给模型(latent_dim的嵌入层可能为120)。因此,您的每个单词现在都由大小为120的向量表示。您的输入句子也必须具有相同的大小。因此找到一个合适的最大句子长度,并将每个句子转换为该长度,如果句子短于max len,则填充为零,其中0表示空字。