从张量列表中查找给定 id 和权重的嵌入。
用法
tf.nn.embedding_lookup_sparse(
params, sp_ids, sp_weights, combiner=None, max_norm=None, name=None
)
参数
-
params
表示完整嵌入张量的单个张量,或除第一个维度外所有相同形状的张量列表,表示遵循"div" 分区策略的分片嵌入张量。 -
sp_ids
N x MSparseTensor
of int64 ids,其中 N 通常是批量大小,M 是任意的。 -
sp_weights
浮点/双倍权重的SparseTensor
或指示所有权重的None
应为 1。如果指定,sp_weights
必须具有与sp_ids
完全相同的形状和索引。 -
combiner
指定归约操作的字符串。目前支持"mean"、"sqrtn"和"sum"。 "sum" 计算每行嵌入结果的加权和。 "mean" 是加权总和除以总重量。 "sqrtn" 是加权和除以权重平方和的平方根。默认为mean
。 -
max_norm
如果不是None
,如果每个嵌入的 l2-norm 大于此值,则在组合之前将对其进行裁剪。 -
name
操作的可选名称。
返回
-
表示稀疏 id 的组合嵌入的密集张量。对于由表示的密集张量中的每一行
sp_ids
,op 查找该行中所有 id 的嵌入,将它们乘以相应的权重,并按指定组合这些嵌入。换句话说,如果
shape(combined params) = [p0, p1, ..., pm]
和
shape(sp_ids) = shape(sp_weights) = [d0, d1]
然后
shape(output) = [d0, p1, ..., pm]
。例如,如果 params 是一个 10x20 矩阵,那么 sp_ids /sp_weights 是
[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
使用
combiner
="mean",则输出将是一个 3x20 矩阵,其中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
抛出
-
TypeError
如果sp_ids
不是SparseTensor
,或者如果sp_weights
既不是None
也不是SparseTensor
。 -
ValueError
如果combiner
不是 {"mean"、"sqrtn"、"sum"} 之一。
此操作假定在由sp_ids 表示的密集张量中的每一行至少有一个 id(即没有具有空特征的行),并且 sp_ids 的所有索引都以规范的行优先顺序排列。
sp_ids
和 sp_weights
(如果不是 None)是排名为 2 的 SparseTensor
。嵌入总是沿最后一个维度聚合。
它还假设所有 id 值都在 [0, p0) 范围内,其中 p0 是沿维度 0 的参数大小的总和。
如果 len(params) > 1
,则 sp_ids
的每个元素根据 "div" 分区策略在 params
的元素之间进行分区,这意味着我们以连续的方式将 id 分配给分区。例如,13 个 id 被分成 5 个分区:[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]]
。
如果 id 空间不均分分区数,那么前(max_id + 1) % len(params)
个分区中的每一个都会被分配一个多一个 id。
相关用法
- Python tf.nn.embedding_lookup用法及代码示例
- Python tf.nn.experimental.stateless_dropout用法及代码示例
- Python tf.nn.erosion2d用法及代码示例
- Python tf.nn.elu用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.set_weights用法及代码示例
- Python tf.nn.dropout用法及代码示例
- Python tf.nn.gelu用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.set_weights用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.get_weights用法及代码示例
- Python tf.nn.local_response_normalization用法及代码示例
- Python tf.nn.scale_regularization_loss用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.add_loss用法及代码示例
- Python tf.nn.max_pool用法及代码示例
- Python tf.nn.RNNCellDropoutWrapper.set_weights用法及代码示例
- Python tf.nn.l2_loss用法及代码示例
- Python tf.nn.log_softmax用法及代码示例
- Python tf.nn.weighted_cross_entropy_with_logits用法及代码示例
- Python tf.nn.ctc_greedy_decoder用法及代码示例
- Python tf.nn.dilation2d用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.get_weights用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.nn.embedding_lookup_sparse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。