huber_loss
paddle.fluid.layers. huber_loss ( input, label, delta ) [源代码]
该OP计算输入(input)与标签(label)之间的Huber损失。Huber损失是常用的回归损失之一,相较于平方误差损失,Huber损失减小了对异常点的敏感度,更具鲁棒性。
当输入与标签之差的绝对值大于delta时,计算线性误差:
当输入与标签之差的绝对值小于delta时,计算平方误差:
huber_loss=0.5∗(label−input)∗(label−input)huber_loss=0.5∗(label−input)∗(label−input)
参数:
input (Variable) - 输入的预测数据,维度为[batch_size, 1] 或[batch_size]的Tensor。数据类型为float32或float64。
label (Variable) - 输入的真实标签,维度为[batch_size, 1] 或[batch_size]的Tensor。数据类型为float32或float64。
delta (float) - Huber损失的阈值参数,用于控制Huber损失对线性误差或平方误差的侧重。数据类型为float32。
返回: 计算出的Huber损失,数据维度和数据类型与label相同的Tensor。
返回类型: Variable
代码示例
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.layers.data(name='input', shape=[1], dtype=DATATYPE)
y = fluid.layers.data(name='label', shape=[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