View source on GitHub
|
Looks up embeddings for the given ids and weights from a list of tensors.
tf.nn.embedding_lookup_sparse(
params,
sp_ids,
sp_weights,
combiner=None,
max_norm=None,
name=None,
allow_fast_lookup=False
)
This op assumes that there is at least one id for each row in the dense tensor represented by sp_ids (i.e. there are no rows with empty features), and that all the indices of sp_ids are in canonical row-major order.
sp_ids and sp_weights (if not None) are SparseTensors or RaggedTensors
with rank of 2. For SpareTensors with left-aligned non-zero entries which
can be described as RaggedTensors, use of RaggedTensors can yield higher
performance.
It also assumes that all id values lie in the range [0, p0), where p0 is the sum of the size of params along dimension 0.
If len(params) > 1, each element of sp_ids is partitioned between the
elements of params according to the "div" partition strategy, which means we
assign ids to partitions in a contiguous manner. For instance, 13 ids are
split across 5 partitions as:
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]].
If the id space does not evenly divide the number of partitions, each of the
first (max_id + 1) % len(params) partitions will be assigned one more id.
Args |
|---|
params
sp_ids
SparseTensor of int64 ids where N is typically batch size
and M is arbitrary or a RaggedTensor with rank 2.
sparse_weights
SparseTensor or RaggedTensor of same type and shape as
sparse_ids, containing float / double weights corresponding to
sparse_ids, or None if all weights are assumed to be 1.0.
combiner
mean.
max_norm
None, each embedding is clipped if its l2-norm is larger
than this value, before combining.
name
allow_fast_lookup
params is a single tensor and
max_norm is None. Setting this flag to True during training can
cause the use of dense gradients with increased memory footprint.
Returns | |
|---|---|
A dense tensor representing the combined embeddings for the
sparse ids. For each row in the dense tensor represented by sp_ids, the op
looks up the embeddings for all ids in that row, multiplies them by the
corresponding weight, and combines these embeddings as specified. |
In other words, if
shape(combined params) = [p0, p1, ..., pm]
and
shape(sp_ids) = shape(sp_weights) = [d0, d1]
then
shape(output) = [d0, p1, ..., pm].
For instance, if params is a 10x20 matrix, and sp_ids / sp_weights are
[0, 0]: id 1, weight 2.0
[0, 1]: id 3, weight 0.5
[1, 0]: id 0, weight 1.0
[2, 3]: id 1, weight 3.0
with combiner="mean", then the output will be a 3x20 matrix where
output[0, :] = (params[1, :] * 2.0 + params[3, :] * 0.5) / (2.0 + 0.5)
output[1, :] = (params[0, :] * 1.0) / 1.0
output[2, :] = (params[1, :] * 3.0) / 3.0
Raises |
|---|
TypeError
sp_ids is not a SparseTensor, or if sp_weights is
neither None nor SparseTensor.
ValueError
combiner is not one of {"mean", "sqrtn", "sum"}.
View source on GitHub