tf.nn.embedding_lookup - 行还是列?

时间:2017-09-26 18:39:35

标签: tensorflow deep-learning

这是一个非常简单的问题。我正在学习张量流,并使用Tensorflow转换我的numpy编写的代码。

我定义了字嵌入矩阵U = [embedding_size, vocab_size],因此每列都是每个单词的嵌入向量。

我将U转换为TF,如下所示:

U = tf.Variable(tf.truncated_normal([embedding_size, vocab_size], -0.1, 0.1))

到目前为止,非常好。

现在我需要查找每个单词的嵌入进行训练。我认为它会是

tf.nn.embedding_lookup(U, word_index)

我的问题是因为我的嵌入是一个列向量,我需要在numpy中查找这个U[:,x[t]]

TF如何确定需要通过word_index返回行OR列?

默认是什么?行或列? 如果它是行向量,那么我是否需要转置嵌入矩阵?

https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup 没有提到这一点。如果有人能指出我正确的资源,我会很感激。

2 个答案:

答案 0 :(得分:1)

你应该是vocab_size x embedding_size,你现在拥有的转置。

答案 1 :(得分:1)

如果params是单个张量,tf.nn.embedding_lookup(params, ids)操作会将ids视为params的索引。如果params是张量变量列表或分区变量,那么ids仍然对应于这些张量中的行,但partition_strategy"div""mod" )确定ids映射到特定行的方式。

作为Aaron suggests,将嵌入U定义为具有[vocab_size, embedding_size]形状可能是最简单的,这样您就可以使用tf.nn.embedding_lookup()related functions

或者,您可以使用axis参数tf.gather()U中选择列:

embedding = tf.gather(U, word_index, axis=1)