huber_loss¶
- paddle.fluid.layers.loss. huber_loss ( input, label, delta ) [source]
-
This operator computes the Huber loss between input and label. Huber loss is commonly used in regression tasks. Compared to square_error_cost, Huber loss is more robust and less sensitivity to outliers.
When the absolute difference between input and label is greater than delta, the linear error is calculated:
\[huber\_loss = delta * (label - input) - 0.5 * delta * delta\]When the absolute difference between input and label is greater than delta, the square error is calculated:
\[huber\_loss = 0.5 * (label - input) * (label - input)\]- Parameters
-
input (Variable) – Predicted data, 2D-Tensor with the shape of [batch_size, 1]. The data type should be float32.
label (Variable) – Ground truth label, 2D-Tensor with the shape of [batch_size, 1]. The data type should be float32.
delta (float) – The threshold for Huber loss, which is used to control the balance between the linear error and square error. The data type should be float32.
- Returns
-
The huber loss, a tensor with the same shape and data type as input.
- Return type
-
Variable
Examples:
import paddle.fluid as fluid import numpy as np DATATYPE='float32' input_data = np.array([[1.],[2.],[3.],[4.]]).astype(DATATYPE) label_data = np.array([[3.],[3.],[4.],[4.]]).astype(DATATYPE) x = fluid.data(name='input', shape=[None, 1], dtype=DATATYPE) y = fluid.data(name='label', shape=[None, 1], dtype=DATATYPE) loss = fluid.layers.huber_loss(input=x, label=y, delta=1.0) place = fluid.CPUPlace() #place = fluid.CUDAPlace(0) exe = fluid.Executor(place) HuberLoss, = exe.run(feed={'input':input_data ,'label':label_data}, fetch_list=[loss.name]) print(HuberLoss) #[[1.5], [0.5], [0.5], [0. ]], dtype=float32