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

Python Keras自定义损失错误:未知损失函数,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我曾尝试在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 及 我的模型结构是: input_layer = Input(shape=trai

我曾尝试在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

我的模型结构是:

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_

如何解决此问题

我找到了一个解决办法

但这是使用自定义损耗的唯一方法吗?要提前保存模型并加载它吗


提前感谢。

只需删除自定义损失的数量,它就可以正常运行

我的损失 之前 之后
你能试着删除报价单吗<代码>“时间输出”:每分钟一次删除报价后工作!谢谢million@KotaMori,你能把这当作一个答案,让吉姆接受吗?这样人们就能知道答案了?那太好了。@JimChen谢谢你的考虑。这一次,你能接受自己的答案吗?
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()
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()