在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 +字数吗?什么是其他额外条目?
答案 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 +最大整数 输入数据中出现索引。