target_assign
paddle.fluid.layers.
target_assign
(input, matched_indices, negative_indices=None, mismatch_value=None, name=None)[源代码]
对于每个实例,根据 match_indices
和 negative_indices
位置索引, 给输入 out
和 out_weight
赋值。输入 input
和 negative_indices
均为2-D LoDTensor。假如 input
中每个实例的行偏移称作lod,该操作计算步骤如下:
1.根据match_indices赋值:
- If id = match_indices[i][j] > 0,
- out[i][j][0 : K] = X[lod[i] + id][j % P][0 : K]
- out_weight[i][j] = 1.
- Otherwise,
- out[j][j][0 : K] = {mismatch_value, mismatch_value, ...}
- out_weight[i][j] = 0.
2.如果提供neg_indices,则再次依据该输入赋值:
neg_indices中的第i个实例的索引称作neg_indice,则对于第i个实例:
- for id in neg_indice:
- out[i][id][0 : K] = {mismatch_value, mismatch_value, ...}
- 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)
代码示例:
- import paddle.fluid as fluid
- x = fluid.data(
- name='x',
- shape=[4, 20, 4],
- dtype='float',
- lod_level=1)
- matched_id = fluid.data(
- name='indices',
- shape=[8, 20],
- dtype='int32')
- trg, trg_weight = fluid.layers.target_assign(
- x,
- matched_id,
- mismatch_value=0)