当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.compat.v1.nn.embedding_lookup_sparse用法及代码示例


从张量列表中查找给定 id 和权重的嵌入。

用法

tf.compat.v1.nn.embedding_lookup_sparse(
    params, sp_ids, sp_weights, partition_strategy='mod', name=None,
    combiner=None, max_norm=None
)

参数

  • params 表示完整嵌入张量的单个张量,或除了第一个维度之外所有相同形状的列表张量,表示分片嵌入张量。或者,通过沿维度 0 分区创建的 PartitionedVariable 。每个元素的大小必须针对给定的 partition_strategy 进行适当调整。
  • sp_ids N x M SparseTensor of int64 ids,其中 N 通常是批量大小,M 是任意的。
  • sp_weights 浮点/双倍权重的 SparseTensor 或指示所有权重的 None 应为 1。如果指定,sp_weights 必须具有与 sp_ids 完全相同的形状和索引。
  • partition_strategy 指定分区策略的字符串,如果 len(params) > 1 则相关。目前支持"div""mod"。默认为 "mod" 。有关详细信息,请参阅tf.nn.embedding_lookup
  • name 操作的可选名称。
  • combiner 指定归约操作的字符串。目前支持"mean"、"sqrtn"和"sum"。 "sum" 计算每行嵌入结果的加权和。 "mean" 是加权总和除以总重量。 "sqrtn" 是加权和除以权重平方和的平方根。默认为 mean
  • max_norm 如果不是 None ,如果每个嵌入的 l2-norm 大于此值,则在组合之前将对其进行裁剪。

返回

  • 表示稀疏 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_idssp_weights(如果不是 None)是排名为 2 的 SparseTensor。嵌入总是沿最后一个维度聚合。

它还假设所有 id 值都在 [0, p0) 范围内,其中 p0 是沿维度 0 的参数大小的总和。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.nn.embedding_lookup_sparse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。