美文网首页深度学习-推荐系统-CV-NLP
tf.nn.embedding_lookup_sparse AP

tf.nn.embedding_lookup_sparse AP

作者: Nevrast | 来源:发表于2019-01-28 19:15 被阅读19次

    来自官网

    tf.nn.embedding_lookup_sparse(
    params,
    sp_ids,
    sp_weights,
    partition_strategy='mod',
    name=None,
    combiner=None,
    max_norm=None
    )

    • params embedding使用的lookup table.
    • sp_ids 查找lookup table的SparseTensor.
    • combiner 通过什么运算把一行的数据结合起来mean, sum等.
    • 其它没用到过

    例子

    首先定义embedding的矩阵

    import numpy as np
    import tensorflow as tf
    
    ### embedding matrix
    example = np.arange(24).reshape(6, 4).astype(np.float32)
    embedding = tf.Variable(example)
    

    其实这个矩阵就是

    #------------------------------------------------------#
    array([[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.],
           [ 8.,  9., 10., 11.],
           [12., 13., 14., 15.],
           [16., 17., 18., 19.],
           [20., 21., 22., 23.]], dtype=float32)
    #------------------------------------------------------#
    

    接下来使用tf.SparseTensor来定义一个稀疏矩阵

    ### embedding lookup SparseTensor
    idx = tf.SparseTensor(indices=[[0, 0], [0, 1], [1, 1], [1, 2], [2, 0]],
                          values=[0, 1, 2, 3, 0], dense_shape=[3, 3])
    # 这个稀疏矩阵写成普通形式这样
    #---------------------------------------------------------------------#
    array([[0, 1, None],
           [None, 2, 3],
           [0, None, None]]) # 为了与0元素相区别,没有填充的部分写成了None
    #---------------------------------------------------------------------#
    

    使用查找表,打印出结果

    embed = tf.nn.embedding_lookup_sparse(embedding, idx, None, combiner='sum')
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    print(sess.run(embed))
    #----------------结果----------------------#
    [[ 4.  6.  8. 10.]
     [20. 22. 24. 26.]
     [ 0.  1.  2.  3.]]
    #-------------------------------------------#
    

    现在分析一下结果,结果的shape=(idx.shape[0], embedding.shape[1]),其中结果的第一行等于“embeding的第一行加上embedding的第二行,也就是idx的第一行非None的元素的value,对应了embedding的行数,然后这些行相加“;结果第二行为”embedding第3行和第四行相加“;结果第三行也同理。

    相关文章

      网友评论

        本文标题:tf.nn.embedding_lookup_sparse AP

        本文链接:https://www.haomeiwen.com/subject/lthzjqtx.html