Реализация пользовательской функции потерь Keras с операцией «больше чем» - PullRequest
0 голосов
/ 23 марта 2020

Я создаю пользовательскую функцию потерь с Keras и TF в качестве бэкэнда. Функция потерь вычисляет долю элементов с ошибками, превышающими некоторый порог.

def custom_loss(y_true, y_pred, thresh=1e-6):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    div_result = Lambda(
        lambda x: x[0] / x[1])(
        [y_true_f - y_pred_f, y_true_f])
    greater = K.greater(div_result, thresh)
    return K.sum(K.cast(greater, 'float32'))

Неудивительно, что я сталкиваюсь с ошибкой "Операция имеет None для градиента. Пожалуйста, убедитесь, что все у ваших операций определен градиент (т. е. различимы). Обычные операции без градиента: K.argmax, K.round, K.eval. " Я думаю, это потому, что операция K.greater не дифференцируема.

Есть ли способ обойти это?

Спасибо.

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