loss.py 880 B

123456789101112131415161718192021222324
  1. import tensorflow as tf
  2. import keras as K
  3. def focal_loss(gamma=2., alpha=.5):
  4. # 3-0.5 precision-low recall-high
  5. # 3-0.37 precision-high recall-low
  6. # 3-0.25 precision-high recall-low
  7. # 2-0.5 precision-low recall-high
  8. # 2-0.25 precision-high recall-low
  9. def f_loss(y_true, y_pred):
  10. pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
  11. pt_0 = tf.where(tf.equal(y_true, 0), y_pred, tf.zeros_like(y_pred))
  12. return - K.backend.sum(alpha * K.backend.pow(1. - pt_1, gamma)
  13. * K.backend.log(K.backend.epsilon()+pt_1))\
  14. - K.backend.sum((1-alpha) * K.backend.pow(pt_0, gamma)
  15. * K.backend.log(1. - pt_0 + K.backend.epsilon()))
  16. return f_loss
  17. def union_loss(gamma=2., alpha=.5):
  18. def _loss(y_true, y_pred):
  19. return focal_loss(gamma, alpha)