나는 정확히 같은 질문을했습니다. 허용되는 대답은 유사한 속성을 가질 수있는 logcosh
을 사용하지만 정확히 후버 손실은 아닙니다. 다음은 Keras 용 후버 손실을 구현 한 방법입니다 (Tensorflow 1.5의 Keras를 사용하고 있음).
import numpy as np
import tensorflow as tf
'''
' Huber loss.
' https://jaromiru.com/2017/05/27/on-using-huber-loss-in-deep-q-learning/
' https://en.wikipedia.org/wiki/Huber_loss
'''
def huber_loss(y_true, y_pred, clip_delta=1.0):
error = y_true - y_pred
cond = tf.keras.backend.abs(error) < clip_delta
squared_loss = 0.5 * tf.keras.backend.square(error)
linear_loss = clip_delta * (tf.keras.backend.abs(error) - 0.5 * clip_delta)
return tf.where(cond, squared_loss, linear_loss)
'''
' Same as above but returns the mean loss.
'''
def huber_loss_mean(y_true, y_pred, clip_delta=1.0):
return tf.keras.backend.mean(huber_loss(y_true, y_pred, clip_delta))
손실 또는 손실의 평균을 줄이려면 위의 해당 기능을 사용하십시오.
안녕하세요 @avejidah. 실제로 그들은 매우 유사합니다. Keras에서 Huber Loss에 대한 홍보가있었습니다. 당신은 그것을 여기에서 볼 수 있습니다. https://github.com/keras-team/keras/pull/6410. – hakaishinbeerus
안녕하세요. 나는 그 (것)들이 유사하다는 것을 동의한다, 그러나 동일하지 않다. the-moliver와 Danielhiversen은 PR 코멘트에서 그 점을 지적하고 Keras가 가지고있는 손실 함수를 정확하게 반영하기 위해'huber'를'logcosh'로 개명했습니다. AFAIK, Keras는 여전히 Huber Loss를 가지고 있지 않으므로, 사용에 관심이있는 분들은 제 기능이 정확해야합니다. – avejidah