Keras嵌入层掩蔽。为什么input_dim需要|词汇| + 2?

时间:2017-04-05 10:02:01

标签: python nlp deep-learning keras keras-layer

Embedding https://keras.io/layers/embeddings/的Keras文档中,对mask_zero的解释是

  

mask_zero:输入值0是否是应该被屏蔽掉的特殊“填充”值。当使用可能需要可变长度输入的循环层时,这很有用。如果这是True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。如果mask_zero设置为True,那么索引0就不能用在词汇表中(input_dim应该等于|词汇| + 2)。

为什么input_dim需要2 + +词汇表中的单词数量?假设0被屏蔽并且无法使用,它不应该只是1 +字数吗?什么是其他额外条目?

2 个答案:

答案 0 :(得分:7)

我相信文档在那里有点误导。在正常情况下,您将n输入数据索引[0, 1, 2, ..., n-1]映射到向量,因此您的input_dim应该与您拥有的元素一样多

input_dim = len(vocabulary_indices)

说这个的等效(但有点令人困惑)的方式,以及文档的方式,就是说

  输入数据中出现

1 +最大整数索引。

input_dim = max(vocabulary_indices) + 1

如果您启用了屏蔽功能,则值0的处理方式会有所不同,因此您将n索引增加一个:[0, 1, 2, ..., n-1, n],因此您需要

input_dim = len(vocabulary_indices) + 1

或者

input_dim = max(vocabulary_indices) + 2

文档在这里变得特别令人困惑,因为他们说

  

(input_dim应该等于|vocabulary| + 2

我将|x|解释为集合的基数(相当于len(x)),但作者似乎意味着

  

输入数据中出现的2 +最大整数索引。

答案 1 :(得分:1)

因为input_dim已经是词汇表的+1,所以你只需要为0添加另一个+1并获得+2。

  

input_dim:int> 0.词汇量的大小,即。 1 +最大整数   输入数据中出现索引。