當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.nn.embedding_lookup_sparse用法及代碼示例


從張量列表中查找給定 id 和權重的嵌入。

用法

tf.nn.embedding_lookup_sparse(
    params, sp_ids, sp_weights, combiner=None, max_norm=None, name=None
)

參數

  • params 表示完整嵌入張量的單個張量,或除第一個維度外所有相同形狀的張量列表,表示遵循"div" 分區策略的分片嵌入張量。
  • sp_ids N x M SparseTensor 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_idssp_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。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.nn.embedding_lookup_sparse。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。