Предположим, что y_true
и y_pred
находятся в [-1,1].Мне нужна функция взвешенной среднеквадратичной ошибки, в которой потери для выборок, которые являются положительными в y_true
и отрицательными в y_pred
или наоборот, взвешиваются на exp(alpha)
.Вот мой код:
import keras.backend as K
alpha = 1.0
def custom_loss(y_true, y_pred):
se = K.square(y_pred-y_true)
true_label = K.less_equal(y_true,0.0)
pred_label = K.less_equal(y_pred,0.0)
return K.mean(se * K.exp(alpha*K.cast(K.not_equal(true_label,pred_label), tf.float32)))
А вот график этой функции потерь.Разные кривые для разных значений для y_true
.![enter image description here](https://i.stack.imgur.com/i03cE.png)
Я хочу знать:
- Является ли это допустимой функцией потерь, поскольку она не дифференцируется в 0?
- Мой код правильный?