我们花了很多时间阅读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 * x
(y = w * x + b
的一部分)的密集张量。
对于单热编码或SparseTensor,来自weight
的{{1}}实际上是embedding_lookup_sparse
的值,因为查找数据始终为w * x
且不需要添加其他1
s。
我所说的也令人困惑。任何人都可以帮忙详细解释一下吗?
答案 0 :(得分:1)
嵌入查找和嵌入查找稀疏之间的主要区别在于稀疏版本要求id和权重为SparseTensor类型。
嵌入查找的工作原理:
你传入一个大小的张量,embedding_lookup_sparse会将张量的片段(由sp_ids参数引用的片段)乘以一些权重(也作为sp_weight传入;默认为值1)然后返回新的片段。
没有偏见词。您可以通过引用多个来将张量的切片添加到一起,以作为输出中的元素包含在内。