About Huber Loss
Zhangang1999 opened this issue · 2 comments
Zhangang1999 commented
Zhangang1999 commented
It is easy to konw the way to calculate it.But the code is different as following.
def loss(self, predicted, actual):
l1_dist = np.abs(predicted - actual)
mse_mask = l1_dist < self._delta # MSE part
mae_mask = ~mse_mask # MAE part
mse = 0.5 * (predicted - actual) ** 2
mae = self._delta * np.abs(predicted - actual) - 0.5 * self._delta ** 2
m = predicted.shape[0]
return np.sum(mse * mse_mask + mae * mae_mask) / m
I think it should be wrong. the return part should not have mae_mask* and mse_mask.
# huber loss
def huber(true, pred, delta):
loss = np.where(np.abs(true-pred) < delta , 0.5*((true-pred)**2), delta*np.abs(true - pred) - 0.5*(delta**2))
return np.sum(loss)
borgwang commented
@Zhangang1999
The implementation is correct. If you divide the loss by the batch_size i.e. return np.mean(loss)
, the result would be exactly the same.