Ошибка пользовательской потери Keras: неизвестная функция потерь

Я попытался настроить функцию потерь в Керасе.

Я пробовал два подхода:

import keras.backend as K
from keras.losses import mean_absolute_error

def mae_in_minute(y_true, y_pred):
    temp = K.mean(K.abs(y_pred - y_true), axis=-1)/60
    return temp

а также

import keras.backend as K
from keras.losses import mean_absolute_error

def mae_in_minute(y_true, y_pred):
    return mean_absolute_error(y_true, y_pred)/60

Моя модельная структура:

input_layer = Input(shape=training.shape[1:len(training.shape)])
added = Conv2D(128, (3, training.shape[2]),activation="relu")(input_layer)
added = Flatten()(added)
added = Dense(600, activation='relu')(added)
added = Dense(400, activation='relu')(added)
added = Dense(256, activation='relu')(added)
added = Dense(256, activation='relu')(added)
added = Dense(256, activation='relu')(added)
added = Dense(200, activation='relu')(added)
added = Dense(100, activation='relu')(added)
added = Dense(50, activation='relu')(added)
output_temp = Dense(2,activation='softmax', name="temp_output")(added)
output_time = Dense(1,activation='relu', name="time_output")(added)
model = Model(input=input_layer, output=[output_temp,output_time])
losses = {
    "temp_output": "categorical_crossentropy",
    "time_output": "mae_in_minute",
}
lossWeights = {"temp_output": 1.0, "time_output": 1.0}
model.compile(optimizer='adam',loss=losses, loss_weights=lossWeights)
model.summary()

Но я получаю это сообщение об ошибке с обоими настраиваемыми подходами к потере:

Неизвестная функция потерь: mae_in_minute

Как мне решить эту проблему?

Я нашел одно решение здесь.

Но разве это единственный способ использовать нестандартную потерю? Чтобы заранее сохранить мою модель и загрузить ее?

Заранее спасибо.


person Jim Chen    schedule 05.10.2018    source источник
comment
Можете попробовать удалить цитату? "time_output": mae_in_minute   -  person Kota Mori    schedule 05.10.2018
comment
Работает после удаления цитаты! Бесконечно благодарен   -  person Jim Chen    schedule 05.10.2018
comment
@KotaMori, можешь сформулировать это как ответ, чтобы Джим мог принять это? Таким образом люди могут узнать, что на него был дан ответ?   -  person from keras import michael    schedule 05.10.2018
comment
Что будет здорово.   -  person Jim Chen    schedule 05.10.2018
comment
может ли кто-нибудь сказать мне, как удаление цитаты решает эту проблему ..   -  person Umer    schedule 05.10.2018
comment
@JimChen Спасибо за внимание. На этот раз ты можешь принять свой ответ?   -  person Kota Mori    schedule 05.10.2018
comment
@UmerFarooq Функции потерь должны быть функциями. Передача строк, таких как mse, - это просто ярлык только для встроенных функций потерь для keras.   -  person Kota Mori    schedule 05.10.2018


Ответы (1)


Просто удалите кавычки на нестандартную потерю, и она должна работать безупречно.

My_loss

import keras.backend as K
from keras.losses import mean_absolute_error

def mae_in_minute(y_true, y_pred):
    return mean_absolute_error(y_true, y_pred)/60

До

losses = {
    "temp_output": "categorical_crossentropy",
    "time_output": "mae_in_minute",
}
lossWeights = {"temp_output": 1.0, "time_output": 1.0}
model.compile(optimizer='adam',loss=losses, loss_weights=lossWeights)
model.summary()

После

losses = {
    "temp_output": "categorical_crossentropy",
    "time_output": mae_in_minute,
}
lossWeights = {"temp_output": 1.0, "time_output": 1.0}
model.compile(optimizer='adam',loss=losses, loss_weights=lossWeights)
model.summary()
person Jim Chen    schedule 05.10.2018