Модель загрузки с пользовательской потерей + Керас


В Keras, если вам нужно иметь пользовательский убыток с дополнительными параметрами, мы можем использовать его, как указано на https://datascience.stackexchange.com/questions/25029/custom-loss-function-with-additional-parameter-in-keras

def penalized_loss(noise):
    def loss(y_true, y_pred):
        return K.mean(K.square(y_pred - y_true) - K.square(y_true - noise), axis=-1)
    return loss
Вышеприведенный метод работает, когда я тренирую модель. Однако, как только модель обучена, у меня возникают трудности с загрузкой модели. Когда я пытаюсь использовать параметр custom_objects в load_model, как показано ниже
model = load_model(modelFile, custom_objects={'penalized_loss': penalized_loss} )

Он жалуется ValueError: Unknown loss function:loss

Есть ли какой-либо способ передать функцию потерь в качестве одной из пользовательских потерь в custom_objects ? Из того, что я могу собрать, внутренняя функция не находится в пространстве имен во время вызова load_model. Есть ли более простой способ загрузить модель или использовать пользовательскую потерю с дополнительными параметрами
1 3

1 ответ:

Да, есть! custom_objects ожидает точную функцию, которую вы использовали в качестве функции потерь (внутреннюю в вашем случае):

model = load_model(modelFile, custom_objects={ 'loss': penalized_loss(noise) })

К сожалению, keras не будет хранить в модели значение шума, поэтому вам нужно вручную передать его в функцию load_model.