Я создаю пользовательскую функцию потерь с 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 не дифференцируема.
Есть ли способ обойти это?
Спасибо.