target_assign

paddle.fluid.layers. target_assign ( input, matched_indices, negative_indices=None, mismatch_value=None, name=None ) [源代码]

对于每个实例,根据 match_indicesnegative_indices 位置索引, 给输入 outout_weight 赋值。输入 inputnegative_indices 均为2-D LoDTensor。假如 input 中每个实例的行偏移称作lod,该操作计算步骤如下:

1.根据match_indices赋值:

  1. If id = match_indices[i][j] > 0,
  2. out[i][j][0 : K] = X[lod[i] + id][j % P][0 : K]
  3. out_weight[i][j] = 1.
  4. Otherwise,
  5. out[j][j][0 : K] = {mismatch_value, mismatch_value, ...}
  6. out_weight[i][j] = 0.

2.如果提供neg_indices,则再次依据该输入赋值:

neg_indices中的第i个实例的索引称作neg_indice,则对于第i个实例:

  1. for id in neg_indice:
  2. out[i][id][0 : K] = {mismatch_value, mismatch_value, ...}
  3. out_weight[i][id] = 1.0

参数:

  • input (Variable) - 输入为3-D LoDTensor,为了方便在上述文档中解释,假如维度是[M,P,K]。

  • matched_indices (Variable) - 输入为2-D Tensor,数据类型为int32,表示在输入中匹配位置,具体计算如上,同样,为了方便解释,假如维度大小为[N,P],如果 matched_indices[i][j] 为-1,表示在第 i 个实例中第j列项没有任何匹配项,输出会设置成 mismatch_value

  • negative_indices (Variable,可选) - 维度为2-D LoDTensor,数据类型为int32。可以不设置,如果设置,会依据该位置索引再次给输出赋值,具体参考上述文档。

  • mismatch_value (float32,可选) - 未匹配的位置填充值。

  • name (str) - 具体用法请参见 Name ,一般无需设置,默认值为None。

返回:返回一个元组(out,out_weight)。out是三维张量,维度为[N,P,K],N和P与 matched_indices 中的N和P一致,K和输入X中的K一致。 out_weight 的维度为[N,P,1]。

返回类型:tuple(Variable)

代码示例

  1. import paddle.fluid as fluid
  2. x = fluid.data(
  3. name='x',
  4. shape=[4, 20, 4],
  5. dtype='float',
  6. lod_level=1)
  7. matched_id = fluid.data(
  8. name='indices',
  9. shape=[8, 20],
  10. dtype='int32')
  11. trg, trg_weight = fluid.layers.target_assign(
  12. x,
  13. matched_id,
  14. mismatch_value=0)