简体   繁体   English

Keras自定义损失错误:未知损失函数

[英]Keras custom loss error : Unknown loss function

I have tried to customize a loss function in Keras. 我试图在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 未知的损失函数: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 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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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