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 youpt_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))