为什么在seq2seq网络中需要填充

时间:2019-08-07 11:08:42

标签: pytorch padding seq2seq

要处理不同的序列,我想知道。

  1. 为什么我们需要将单词的序列填充到相同的长度?

  2. 如果答案为“是,则需要填充”。我可以在其他索引中设置填充吗?例如,如果我有这样的索引词:

    {0:"<s>,1:"<e>",2:"AAA",3:"BBB",.......,500:"zzz"}

<s>是句子的开头单词,是句子的结尾单词。

我可以将填充标志设置为最后一个索引吗?

{0:"<s>,1:"<e>",2:"AAA",3:"BBB",.......,500:"zzz",501:"<pad>"} 

1 个答案:

答案 0 :(得分:2)

  

为什么我们需要将单词的序列填充到相同的长度?

因为基本上所有带参数的层在其逻辑上的某个点都执行某种矩阵乘法(实际上是张量乘法)的方式。现在,自己尝试。将并非所有行或列都具有相同长度的矩阵相乘。例如。这应该是什么?

| 1 2 3 |     | 1 | 
| 4 5   |  *  | 2 |  =  ???
              | 3 |

除非您将 some 值放在空白处,否则根本不可能做到这一点。某些人甚至可能争辩说,左侧的东西甚至都不是矩阵。

  

我可以在其他索引中设置填充吗?我可以将填充标志设置为最后一个索引吗?

好的。您可以采用任何想要的填充值。理想情况下,您应该使用一个在您遇到问题时没有其他含义的值,因此不要与任何“真实”值混淆。