【问题标题】:tf.nn.embedding_lookup - row or column?tf.nn.embedding_lookup - 行还是列?
【发布时间】:2017-09-26 18:39:35
【问题描述】:

这是一个非常简单的问题。我正在学习 tensorflow 并使用 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 没有提到这一点。如果有人能指出我正确的资源,我将不胜感激。

【问题讨论】:

    标签: tensorflow deep-learning


    【解决方案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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 2014-02-20
        • 2010-11-15
        • 1970-01-01
        • 2017-12-07
        • 2022-01-02
        • 1970-01-01
        相关资源
        最近更新 更多