Модель загрузки с пользовательской потерей + Керас
В 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 ответ:
Да, есть! custom_objects ожидает точную функцию, которую вы использовали в качестве функции потерь (внутреннюю в вашем случае):
model = load_model(modelFile, custom_objects={ 'loss': penalized_loss(noise) })
К сожалению, keras не будет хранить в модели значение шума, поэтому вам нужно вручную передать его в функцию load_model.