提交 c550e0ce 编写于 作者: M minqiyang

Add python interface for huber regression loss

test=develop
上级 6776e928
......@@ -124,8 +124,9 @@ REGISTER_OPERATOR(huber_loss, ops::HuberLossOp, ops::HuberLossOpMaker<float>,
paddle::framework::DefaultGradOpDescMaker<true>);
REGISTER_OPERATOR(huber_loss_grad, ops::HuberLossGradOp);
REGISTER_OP_CPU_KERNEL(
huber_loss,
ops::HuberLossKernel<paddle::platform::CPUDeviceContext, float>);
huber_loss, ops::HuberLossKernel<paddle::platform::CPUDeviceContext, float>,
ops::HuberLossKernel<paddle::platform::CPUDeviceContext, double>);
REGISTER_OP_CPU_KERNEL(
huber_loss_grad,
ops::HuberLossGradKernel<paddle::platform::CPUDeviceContext, float>);
ops::HuberLossGradKernel<paddle::platform::CPUDeviceContext, float>,
ops::HuberLossGradKernel<paddle::platform::CPUDeviceContext, double>);
......@@ -169,6 +169,7 @@ __all__ = [
'log_loss',
'add_position_encoding',
'bilinear_tensor_product',
'huber_regression_loss',
]
......@@ -8770,3 +8771,51 @@ def bilinear_tensor_product(x,
# add activation
return helper.append_activation(out)
def huber_regression_loss(input, label, delta):
"""
Huber regression loss is a loss function used in robust regression.
Huber regression loss can evaluate the fitness of input to label.
Different from MSE loss, Huber regression loss is more robust for outliers.
When the difference between input and label is large than delta
.. math::
huber\_regression\_loss = delta * (label - input) - 0.5 * delta * delta
When the difference between input and label is less than delta
.. math::
huber\_regression\_loss = 0.5 * (label - input) * (label - input)
Args:
input (Variable): This input is a probability computed by the previous operator.
The first dimension is batch size, and the last dimension is 1.
label (Variable): The groud truth whose first dimension is batch size
and last dimension is 1.
delta (float): The parameter of huber regression loss, which controls
the range of outliers
Returns:
huber\_regression\_loss (Variable): The huber regression loss with shape [batch_size, 1].
Examples:
.. code-block:: python
predictions = fluid.layers.softmax(x)
loss = fluid.layers.huber_regression_loss(input=predictions, label=label, 1.0)
"""
helper = LayerHelper('huber_regression_loss', **locals())
residual = helper.create_variable_for_type_inference(
dtype=helper.input_dtype())
out = helper.create_variable_for_type_inference(dtype=helper.input_dtype())
helper.append_op(
type='huber_loss',
inputs={'X': input,
'Y': label},
outputs={'Out': out,
'Residual': residual},
attrs={'delta': delta})
return out
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册