margin_cross_entropy¶
- paddle.nn.functional. margin_cross_entropy ( logits, label, margin1=1.0, margin2=0.5, margin3=0.0, scale=64.0, group=None, return_softmax=False, reduction='mean' ) ¶
其中,\(\theta_{y_i}\) 是特征 \(x\) 与类 \(w_{i}\) 的角度。更详细的介绍请参考 Arcface loss
,https://arxiv.org/abs/1801.07698 。
提示:
这个 API 支持单卡,也支持多卡(模型并行),使用模型并行时,
logits.shape[-1]
在每张卡上可以不同。
参数¶
logits (Tensor) - 2-D Tensor,维度为
[N, local_num_classes]
,logits
为归一化后的X
与归一化后的W
矩阵乘得到,数据类型为 float16,float32 或者 float64。如果用了模型并行,则logits == sahrd_logits
。label (Tensor) - 维度为
[N]
或者[N, 1]
的标签。margin1 (float,可选) - 公式中的
m1
。默认值为1.0
。margin2 (float,可选) - 公式中的
m2
。默认值为0.5
。margin3 (float,可选) - 公式中的
m3
。默认值为0.0
。scale (float,可选) - 公式中的
s
。默认值为64.0
。group (Group,可选) - 通信组的抽象描述,具体可以参考
paddle.distributed.collective.Group
。默认值为None
。return_softmax (bool,可选) - 是否返回
softmax
概率值。默认值为None
。reduction (str,可选)- 是否对
loss
进行归约。可选值为'none'
|'mean'
|'sum'
。如果reduction='mean'
,则对loss
进行平均,如果reduction='sum'
,则对loss
进行求和,reduction='None'
,则直接返回loss
。默认值为'mean'
。
返回¶
Tensor
(loss
) 或者Tensor
二元组 (loss
,softmax
) - 如果return_softmax=False
返回loss
,否则返回 (loss
,softmax
)。当使用模型并行时softmax == shard_softmax
,否则softmax
的维度与logits
相同。如果reduction == None
,loss
的维度为[N, 1]
,否则为[]
。
代码示例¶
COPY-FROM: paddle.nn.functional.margin_cross_entropy:code-example1 COPY-FROM: paddle.nn.functional.margin_cross_entropy:code-example2