简体   繁体   中英

Keras custom loss error : Unknown loss function

I have tried to customize a loss function in Keras.

I have tried two approaches:

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

and

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

My model structure is:

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()

But I get this error message with both custom loss approaches:

Unknown loss function:mae_in_minute

How do I fix this problem?

I have found one solution here .

But is this the only way to use a custom loss? To save my model in advance and load it?

Thanks in advance.

Just remove the quoation of custom loss, and it should run prefectly.

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

Before

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()

After

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()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM