前言
嘿,虽然Keras
里面自带了很多loss
函数,但是有时候面对定制化的需求,自带的函数还是不够用的,这个时候自定义的loss
函数就派上了用场。本文先简要介绍一种自定义loss
函数的方法,日后有时间再更新其他的(O(∩_∩)O)。
环境
- TensorFlow 2.0 Beta
代码
话不多说,先上代码:
def custom_loss(y_true, y_pred):
return tf.reduce_mean(tf.square(y_true-y_pred))
嘿,这不是我们的 MSE 嘛!当然,除了 MSE,你可以自定义任何类型的loss
函数。函数写好后,就交给模型吧:
model.compile(loss=custom_loss)
那么,除了操纵y_true
和y_pred
,我们还可不可以引入其他的数据来计算loss
呢?Yes!
z = keras.layers.Dense(3197747)(inputs)
def custom_loss(y_true, y_pred):
loss_1 = tf.reduce_mean(tf.sqrt(z))
loss_2 = tf.reduce_mean(tf.square(y_true-y_pred))
return loss_1 + loss_2
model.compile(loss=custom_loss)
嘿,这样就可以方便地算各种loss
啦,例如KL
散度等等。
除了使用Keras functional API
来自定义loss
函数,还有一些其他的方法,就先不介绍啦!
Reference
- Module: tf.keras.losses. (June 13, 2019). Retrieved from https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/losses