F1-оценка как функция потерь - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь повторно реализовать потерю счета F1 для главы классификации RPN Faster RCNN. Однако, с моей (с использованием Keras и Tensorflow backend) реализацией ниже, потеря застряла на уровне ~ 0.9993782699 во время обучения.

def rpn_loss_cls_F_one(num_anchors):
        def rpn_loss_cls(y_true, y_pred):
                if K.image_dim_ordering() == 'tf':                        

                        tp = K.sum(K.cast( y_true[:, :, :, :num_anchors] * y_pred[:, :, :, :], 'float'), axis=0)
                        fp = K.sum(K.cast((1-y_true[:, :, :, :num_anchors])* y_pred[:, :, :, :], 'float'), axis=0)
                        fn = K.sum(K.cast(y_true[:, :, :, :num_anchors]*(1- y_pred[:, :, :, :]), 'float'), axis=0)

                        p = (tp / (tp + fp + K.epsilon()))
                        r = (tp / (tp + fn + K.epsilon())) 

                        f1 = 2*p*r / (p+r+K.epsilon())
                        f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)
                        return 1 - K.mean(f1)


        return rpn_loss_cls

Я что-то упустил? Если нет, какие возможные причины я могу дополнительно изучить, чтобы объяснить это странное поведение потери? Вот репозиторий Faster RCNN, который я использую: https://github.com/kbardool/keras-frcnn

Спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...