TensorFlow中tf.nn.embedding_lookup_sparse的含义是什么?

时间:2016-08-11 10:16:31

标签: python tensorflow embedding

我们花了很多时间阅读tf.nn.embedding_lookup_sparse的API文档。 embedding_lookup_sparse的含义令人困惑,似乎与embedding_lookup完全不同。

这就是我的想法,如果我错了,请纠正我。宽和深模型的示例使用contrib.layers API并为稀疏要素colume调用embedding_lookup_sparse。如果它获得SparseTensor(例如,国家,它是稀疏的),它会创建实际上用于单主机编码的嵌入。然后致电to_weights_sum,将embedding_lookup_sparse的结果作为prediction返回,将嵌入设为variable

embedding_lookup_sparse添加bias的结果,并成为损失函数和培训操作的logits。这意味着embedding_lookup_sparse执行类似w * xy = w * x + b的一部分)的密集张量。

对于单热编码或SparseTensor,来自weight的{​​{1}}实际上是embedding_lookup_sparse的值,因为查找数据始终为w * x且不需要添加其他1 s。

我所说的也令人困惑。任何人都可以帮忙详细解释一下吗?

1 个答案:

答案 0 :(得分:1)

嵌入查找和嵌入查找稀疏之间的主要区别在于稀疏版本要求id和权重为SparseTensor类型。

嵌入查找的工作原理:

你传入一个大小的张量,embedding_lookup_sparse会将张量的片段(由sp_ids参数引用的片段)乘以一些权重(也作为sp_weight传入;默认为值1)然后返回新的片段。

没有偏见词。您可以通过引用多个来将张量的切片添加到一起,以作为输出中的元素包含在内。