пользовательская функция потери отличается от стандартной

Я пытаюсь понять, как создать пользовательскую функцию потерь, и первое, что я попробовал, — это повторно реализовать функцию binary_crossentropy в keras. В моем коде, если я это сделаю:

model.compile(Adam(lr=learning_rate), loss=losses.binary_crossentropy, metrics=['accuracy'])

модель компилируется нормально и быстро обучается, достигая точности более 95% в первую эпоху и потери 0,2

Когда я создаю пользовательскую функцию потерь, которая в основном повторяет loss.binary_crossentropy:

def custom_loss(y_true,y_pred):
        return K.mean(K.binary_crossentropy(y_pred, y_true), axis=-1)

а потом:

model.compile(Adam(lr=learning_rate), loss=custom_loss, metrics=['accuracy'])

когда я подбираю, потери довольно высоки (0,65), а точность низкая (0,47). Процедура подгонки и данные одинаковы в обоих случаях, поэтому кажется, что я неправильно объявляю свою функцию потерь. Я использую последние версии keras с бэкендом tensorflow, и моя модель представляет собой простую полную сверточную модель vgg16 (fcn 32).


person Angel Lopez    schedule 31.05.2017    source источник