mindspore.ops.smooth_l1_loss
- mindspore.ops.smooth_l1_loss(input, target, beta=1.0, reduction='none')[source]
Computes smooth L1 loss, a robust L1 loss.
Warning
After version 2.9.0, the parameter order and default values of beta and reduction will change.
This API has poor performance on CPU and it is recommended to run it on the Ascend/GPU.
SmoothL1Loss is a Loss similar to MSELoss but less sensitive to outliers as described in the Fast R-CNN by Ross Girshick.
Given two input \(x,\ y\) of length \(N\), the unreduced SmoothL1Loss can be described as follows:
\[\begin{split}L_{i} = \begin{cases} \frac{0.5 (x_i - y_i)^{2}}{\text{beta}}, & \text{if } |x_i - y_i| < \text{beta} \\ |x_i - y_i| - 0.5 * \text{beta}, & \text{otherwise.} \end{cases}\end{split}\]If reduction is not none, then:
\[\begin{split}L = \begin{cases} \operatorname{mean}(L_{i}), & \text{if reduction} = \text{'mean';}\\ \operatorname{sum}(L_{i}), & \text{if reduction} = \text{'sum'.} \end{cases}\end{split}\]Here \(\text{beta}\) controls the point where the loss function changes from quadratic to linear. \(\text{beta}>0\) , its default value is
1.0. \(N\) is the batch size.- Parameters
input (Tensor) –
Tensor of shape \((N, *)\) where \(*\) means, any number of additional dimensions. Supported dtypes:
Ascend: float16, float32, bfloat16.
CPU/GPU: float16, float32, float64.
target (Tensor) –
Ground truth data, tensor of shape \((N, *)\).
CPU/Ascend: has the same shape as the input, target and input comply with the implicit type conversion rules to make the data types consistent.
GPU: has the same shape and dtype as the input.
beta (number, optional) –
A parameter used to control the point where the function will change between L1 to L2 loss. Default:
1.0.Ascend: The value should be equal to or greater than zero.
CPU/GPU: The value should be greater than zero.
reduction (str, optional) –
Apply specific reduction method to the output:
'none','mean','sum'. Default:'none'.'none': no reduction will be applied.'mean': compute and return the mean of elements in the output.'sum': the output elements will be summed.
- Returns
Tensor, if reduction is
'none', then output is a tensor with the same shape as input. Otherwise, the shape of output tensor is \(()\).- Raises
TypeError – If input or target is not a Tensor.
RuntimeError – If dtype of input or target is not one of float16, float32, float64, bfloat16.
ValueError – If shape of input is not the same as target.
ValueError – If reduction is not one of
'none','mean','sum'.TypeError – If beta is not a float, int or bool.
RuntimeError – If beta is less than or equal to 0.
- Supported Platforms:
AscendGPUCPU
Examples
>>> import mindspore >>> import numpy as np >>> from mindspore import Tensor, ops >>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32) >>> labels = Tensor(np.array([1, 2, 2]), mindspore.float32) >>> output = ops.smooth_l1_loss(logits, labels) >>> print(output) [0. 0. 0.5]