Пользовательская функция потерь в Keras для взвешивания ошибочно классифицированных образцов - PullRequest
0 голосов
/ 20 ноября 2018

Предположим, что 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

Я хочу знать:

  • Является ли это допустимой функцией потерь, поскольку она не дифференцируется в 0?
  • Мой код правильный?

1 Ответ

0 голосов
/ 17 апреля 2019

Я предлагаю вам этот тип функции потерь для обработки набора данных дисбаланса

def focal_loss(y_true, y_pred):
   gamma = 2.0, alpha = 0.25
   pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
   pt_0 = tf.where(tf.equal(y_true, 0), y_pred, tf.zeros_like(y_pred))
   return -K.sum(alpha * K.pow(1. - pt_1, gamma) * K.log(pt_1))-K.sum((1-alpha) * K.pow(pt_0, gamma) * K.log(1. - pt_0))

из этого источника

...