En estadística, la pérdida de Huber es una función de pérdida utilizada en una regresión robusta, que es menos sensible a los valores atípicos en los datos que la pérdida de error al cuadrado. A veces también se usa una variante para la clasificación.
def huber_fn(y_true, y_pred):
error = y_true - y_pred
is_small_error = tf.abs(error) < 1
squared_loss = tf.square(error) / 2
linear_loss = tf.abs(error) - 0.5
return tf.where(is_small_error, squared_loss, linear_loss)
Tenga en cuenta que el valor de retorno de la función de pérdida personalizada es un vector en lugar de la pérdida promedio , y cada elemento corresponde a una instancia. La ventaja de esto es que Keras puede pasar class_weight
o sample_weight
ajustar los pesos.
huber_fn(y_valid, y_pred)
<tf.Tensor: id=4894, shape=(3870, 1), dtype=float64, numpy=
array([[0.10571115],
[0.03953311],
[0.02417886],
...,
[0.00039475],
[0.00245003],
[0.12238744]])>