mindspore.nn.SoftMarginLoss

查看源文件
class mindspore.nn.SoftMarginLoss(reduction='mean')[源代码]

针对二分类问题的损失函数。

SoftMarginLoss用于计算输入Tensor x 和目标值Tensor y (包含1或-1)的二分类损失值。

loss(x,y)=ilog(1+exp(y[i]x[i]))x.nelement()

x.nelement() 代表 x 中元素的个数。

参数:
  • reduction (str,可选) - 指定应用于输出结果的规约计算方式,可选 'none''mean''sum' ,默认值: 'mean'

    • "none":不应用规约方法。

    • "mean":计算输出元素的平均值。

    • "sum":计算输出元素的总和。

输入:
  • logits (Tensor) - 预测值,数据类型为float16、float32、bfloat16(Atlas训练系列产品不支持)。

  • labels (Tensor) - 目标值,shape与 logits 的相同。GE模式下类型需要与 logits 相同。

输出:

Tensor或Scalar,如果 reduction"none" ,其shape与 logits 相同。否则,将返回Scalar。

异常:
  • TypeError - logitslabels 不是Tensor。

  • TypeError - logitslabels 的数据类型不是float16、float32、bfloat16(Atlas训练系列产品不支持)。

  • ValueError - logits 的shape与 labels 不同。

  • ValueError - reduction 不为 "mean""sum" ,或 "none"

支持平台:

Ascend GPU

样例:

>>> import mindspore
>>> from mindspore import Tensor, nn
>>> import numpy as np
>>> loss = nn.SoftMarginLoss()
>>> logits = Tensor(np.array([[0.3, 0.7], [0.5, 0.5]]), mindspore.float32)
>>> labels = Tensor(np.array([[-1, 1], [1, -1]]), mindspore.float32)
>>> output = loss(logits, labels)
>>> print(output)
0.6764238