huber_loss

paddle.fluid.layers. huber_loss ( input, label, delta ) [源代码]

该OP计算输入(input)与标签(label)之间的Huber损失。Huber损失是常用的回归损失之一,相较于平方误差损失,Huber损失减小了对异常点的敏感度,更具鲁棒性。

当输入与标签之差的绝对值大于delta时,计算线性误差:

huber_loss - 图1

当输入与标签之差的绝对值小于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

代码示例

  1. import paddle.fluid as fluid
  2. import numpy as np
  3. DATATYPE='float32'
  4. input_data = np.array([[1.],[2.],[3.],[4.]]).astype(DATATYPE)
  5. label_data = np.array([[3.],[3.],[4.],[4.]]).astype(DATATYPE)
  6. x = fluid.layers.data(name='input', shape=[1], dtype=DATATYPE)
  7. y = fluid.layers.data(name='label', shape=[1], dtype=DATATYPE)
  8. loss = fluid.layers.huber_loss(input=x, label=y, delta=1.0)
  9. place = fluid.CPUPlace()
  10. #place = fluid.CUDAPlace(0)
  11. exe = fluid.Executor(place)
  12. HuberLoss, = exe.run(feed={'input':input_data ,'label':label_data}, fetch_list=[loss.name])
  13. print(HuberLoss) #[[1.5], [0.5], [0.5], [0. ]], dtype=float32