这是一个非常简单的问题。我正在学习张量流,并使用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 没有提到这一点。如果有人能指出我正确的资源,我会很感激。
答案 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)