作用:选取一个张量里面索引对应的元素
应用场景:单值离散特征的 embedding
,相当于 one-hot 编码
用户\水果 | 苹果 | 香蕉 | 草莓 | 芒果 | 西瓜 | 木瓜 | 火龙果 |
---|---|---|---|---|---|---|---|
user1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
user2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
user3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
import tensorflow as tf
import numpy as np
p = tf.Variable(np.arange(21).reshape(7,3))
u = tf.nn.embedding_lookup(p, ids=[0, 3, 6])
with tf.Session() as s:
s.run(tf.global_variables_initializer())
print(s.run(t))
# [[ 0 1 2] --- p
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]
# [12 13 14]
# [15 16 17]
# [18 19 20]]
# [[ 0 1 2] ---user1
# [ 9 10 11] ---user2
# [18 19 20]] ---user3
作用:选取一个张量里面多个索引对应的元素的平均值
应用场景:多值离散特征的 embedding
,相当于多次 one-hot 后取平均值
用户\水果 | 苹果 | 香蕉 | 草莓 | 芒果 | 西瓜 | 木瓜 | 火龙果 |
---|---|---|---|---|---|---|---|
user1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
user2 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
user3 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
import tensorflow as tf
import numpy as np
p = tf.Variable(np.arange(21).reshape(7,3), dtype=tf.float32)
gs = tf.SparseTensor(indices=[[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1]], values=[0,1,2,6,0,3,4,5], dense_shape=(3,3))
embedded_tags = tf.nn.embedding_lookup_sparse(p, sp_ids=tags, sp_weights=None)
with tf.Session() as s:
s.run([tf.global_variables_initializer(), tf.tables_initializer()])
print(s.run([embedded_tags]))
#[[ 3. , 4. , 5. ], ---user1
# [ 9. , 10. , 11. ], ---user2
# [13.5, 14.5, 15.5]] ---user3
比如 user1:( [ 0 1 2 ] + [ 3 4 5 ] + [ 6 7 8 ] ) / 3 = [ 3. , 4. , 5. ]
相关参考:推荐系统遇上深度学习(四)–多值离散特征的embedding解决方案