与标题一样,在tf.keras.layers.Embedding中,为什么重要的是要知道字典的大小作为输入维?
在这种情况下,张量的尺寸/形状如下:
[batch_size, max_time_steps]
,因此该张量的每个元素的值都可以在0 to vocab_size-1
范围内。[vocab_size, embedding_size]
的嵌入层。嵌入层的输出的形状为[batch_size, max_time_steps, embedding_size]
。3D
张量是递归神经网络的输入。这是在Tensorflow中实现的方式,因此您可以有一个更好的主意:
inputs = tf.placeholder(shape=(batch_size, max_time_steps), ...)
embeddings = tf.Variable(shape=(vocab_size, embedding_size], ...)
inputs_embedded = tf.nn.embedding_lookup(embeddings, encoder_inputs)
现在,嵌入查找表的输出具有[batch_size, max_time_steps, embedding_size]
形状。
因为在内部,嵌入层不过是大小为vocab_size x embedding_size
的矩阵。这是一个简单的查找表:该矩阵的行n
存储单词n
的向量。
因此,如果您有1000个不同的词,您的嵌入层需要知道此数字才能存储1000个向量(作为矩阵)。
不要将图层的内部存储与其输入或输出形状混淆。输入形状为(batch_size, sequence_length)
,其中每个条目都是[0, vocab_size[
范围内的整数。对于这些整数中的每一个,图层将返回内部矩阵的相应行(其大小为embedding_size
的向量),以便输出形状变为(batch_size, sequence_length, embedding_size)
。