美文网首页深度学习-推荐系统-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