1. 程式人生 > >Keras自定義損失函式

Keras自定義損失函式

Keras內建損失函式都預定義在keras.metrics.losses中,以MSE為例,其預定義方法如下:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

我們可以仿照其寫法,定義自己的損失函式。例如何凱明大神在論文Focal Loss for Dense Object Detection中提出的focal loss,keras是沒有預定義的,我們自己用keras實現一下:

def focal_loss_fixed(y_true, y_pred):
    # tensorflow backend, alpha and gamma are hyper-parameters which can set by you
    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))