Keras embedding layer masking. Why does input_dim need to be |vocabulary| + 2?
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Magical Minnie Puzzles
--
Chapters
00:00 Question
01:13 Accepted answer (Score 14)
02:49 Answer 2 (Score 0)
03:14 Thank you
--
Full question
https://stackoverflow.com/questions/4322...
Question links:
https://keras.io/layers/embeddings/
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #nlp #deeplearning #keras #keraslayer
#avk47
ACCEPTED ANSWER
Score 15
I believe the docs are a bit misleading there. In the normal case you are mapping your n input data indices [0, 1, 2, ..., n-1] to vectors, so your input_dim should be as many elements as you have
input_dim = len(vocabulary_indices)
An equivalent (but slightly confusing) way to say this, and the way the docs do, is to say
1 + maximum integer index occurring in the input data.
input_dim = max(vocabulary_indices) + 1
If you enable masking, value 0 is treated differently, so you increment your n indices by one: [0, 1, 2, ..., n-1, n], thus you need
input_dim = len(vocabulary_indices) + 1
or alternatively
input_dim = max(vocabulary_indices) + 2
The docs become especially confusing here as they say
(input_dim should equal
|vocabulary| + 2)
where I would interpret |x| as the cardinality of a set (equivalent to len(x)), but the authors seem to mean
2 + maximum integer index occurring in the input data.
ANSWER 2
Score 0
Because the input_dim already is +1 of the vocabulary, so you just add another +1 for the 0 and get the +2.
input_dim: int > 0. Size of the vocabulary, ie. 1 + maximum integer index occurring in the input data.