Я пытаюсь понять, как создать пользовательскую функцию потерь, и первое, что я попробовал, — это повторно реализовать функцию 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).