Пользовательская функция потерь в керасе двоичная кросс-энтропия, дающая неправильные результаты - PullRequest
0 голосов
/ 28 марта 2020

Было ли у кого-нибудь убедительное решение, позволяющее заставить custom_binarycrossentropy работать?

Я испробовал все возможные методы (даже для того, чтобы весь размер обучающих данных совпадал с размером бакты, чтобы исключить зависимость от глобального усреднения во время пакетной обработки). ). Но я вижу существенную разницу между моей двоичной кросс-энтропийной реализацией и реализацией из керас (определяя loss = 'binary_crossentropy')

Мой обычный двоичный кросс-энтропийный код выглядит следующим образом

def _loss_tensor(y_true, y_pred):
y_pred = K.clip(y_pred, _EPSILON, 1.0-_EPSILON)
out = (y_true * K.log(y_pred) + (1.0 - y_true) * K.log(1.0 - y_pred))
return -K.mean(out)
def _loss_tensor2(y_true, y_pred):
y_pred = K.clip(y_pred, _EPSILON, 1.0-_EPSILON)
out = -(y_true * K.log(y_pred) + -(1.0 - y_true) * K.log(1.0 - y_pred))
return out
def _loss_tensor2(y_true, y_pred):
loss1 = K.binary_crossentropy(y_true, y_pred)
return loss1

Нет из этих методов работают. Он не работает, даже если я выполняю K.mean () до того, как получу результаты от пользовательской функции потерь.

Я не могу понять, что особенного делает с использованием loss = 'binary_crossentropy'. Когда я использую свою пользовательскую функцию потерь, обучение отстой, и она работает, как и ожидалось.

Мне нужна моя пользовательская функция потерь, чтобы манипулировать функцией потерь в зависимости от ошибки и дополнительно штрафовать за определенный тип ошибки классификации.

1 Ответ

0 голосов
/ 31 марта 2020

Я нашел способ работы для этого требования и разместил здесь то же самое: https://github.com/keras-team/keras/issues/4108

Однако, почему встроенная функция работает значительно иначе, чем метод явных формул, неизвестно , Однако я ожидаю, что это в основном из-за обработки верхней и нижней границ значений вероятности y_pred.

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