在tf.keras.layers.Embedding中,为什么重要的是要知道字典的大小?

问题描述 投票:1回答:2

与标题一样,在tf.keras.layers.Embedding中,为什么重要的是要知道字典的大小作为输入维?

tensorflow word-embedding
2个回答
2
投票

在这种情况下,张量的尺寸/形状如下:

  • 输入张量的大小为[batch_size, max_time_steps],因此该张量的每个元素的值都可以在0 to vocab_size-1范围内。
  • 然后,来自输入张量的每个值都将通过形状为[vocab_size, embedding_size]的嵌入层。嵌入层的输出的形状为[batch_size, max_time_steps, embedding_size]
  • 然后,在典型的seq2seq场景中,此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]形状。


6
投票

因为在内部,嵌入层不过是大小为vocab_size x embedding_size的矩阵。这是一个简单的查找表:该矩阵的行n存储单词n的向量。

因此,如果您有1000个不同的词,您的嵌入层需要知道此数字才能存储1000个向量(作为矩阵)。

不要将图层的内部存储与其输入或输出形状混淆。输入形状为(batch_size, sequence_length),其中每个条目都是[0, vocab_size[范围内的整数。对于这些整数中的每一个,图层将返回内部矩阵的相应行(其大小为embedding_size的向量),以便输出形状变为(batch_size, sequence_length, embedding_size)

© www.soinside.com 2019 - 2024. All rights reserved.