smooth_l1_loss

paddle.nn.functional. smooth_l1_loss ( input, label, reduction='mean', delta=1.0, name=None ) [源代码]

计算输入 input 和标签 label 间的 SmoothL1 损失,如果逐个元素的绝对误差低于 1,则创建使用平方项的条件, 否则为 L1 损失。在某些情况下,它可以防止梯度爆炸,也称为 Huber 损失,该损失函数的数学计算公式如下:

loss(x,y)=1nizi

zi 的计算公式如下:

zi={0.5(xiyi)2if|xiyi|<δδ|xiyi|0.5δ2otherwise

参数

  • input (Tensor) - 输入 Tensor,数据类型为 float32。其形状为 [N,C],其中 C 为类别数。对于多维度的情形下,它的形状为 [N,C,d1,d2,...,dk]k

  • label (Tensor) - 输入 input 对应的标签值,数据类型和 input 相同。

  • reduction (str,可选) - 指定应用于输出结果的计算方式,数据类型为 string,可选值有 nonemeansum。默认为 mean,计算 mini-batch loss 均值。设置为 sum 时,计算 mini-batch loss 的总和。设置为 none 时,则返回 loss Tensor。

  • delta (str,可选) - SmoothL1Loss 损失的阈值参数 \delta,用于控制 Huber 损失对线性误差或平方误差的侧重。数据类型为 float32。默认值为 1.0。

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

返回

Tensor,返回计算 smooth_l1_loss 后的损失值。

代码示例

>>> import paddle
>>> paddle.seed(2023)

>>> input = paddle.rand([3, 3]).astype('float32')
>>> label = paddle.rand([3, 3]).astype('float32')
>>> output = paddle.nn.functional.smooth_l1_loss(input, label)
>>> print(output)
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
        0.08307374)