Keras custom loss error : Unknown loss function
Keras custom loss error : Unknown 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
和
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()
但是我在两种自定义损失方法中都收到此错误消息:
Unknown loss function:mae_in_minute
如何解决这个问题?
我找到了一种解决方案 here。
但这是使用自定义损失的唯一方法吗?要提前保存我的模型并加载它?
提前致谢。
去掉custom 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
##之前
损失 = {
"temp_output": "categorical_crossentropy",
"time_output": "mae_in_minute",
}
lossWeights = {"temp_output": 1.0, "time_output": 1.0}
model.compile(优化器='adam',loss=losses, loss_weights=lossWeights)
model.summary()
##之后
损失 = {
"temp_output": "categorical_crossentropy",
"time_output": mae_in_minute,
}
lossWeights = {"temp_output": 1.0, "time_output": 1.0}
model.compile(优化器='adam',loss=losses, loss_weights=lossWeights)
model.summary()
我尝试在 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()
但是我在两种自定义损失方法中都收到此错误消息:
Unknown loss function:mae_in_minute
如何解决这个问题?
我找到了一种解决方案 here。
但这是使用自定义损失的唯一方法吗?要提前保存我的模型并加载它?
提前致谢。
去掉custom 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
##之前 损失 = { "temp_output": "categorical_crossentropy", "time_output": "mae_in_minute", } lossWeights = {"temp_output": 1.0, "time_output": 1.0} model.compile(优化器='adam',loss=losses, loss_weights=lossWeights) model.summary()
##之后 损失 = { "temp_output": "categorical_crossentropy", "time_output": mae_in_minute, } lossWeights = {"temp_output": 1.0, "time_output": 1.0} model.compile(优化器='adam',loss=losses, loss_weights=lossWeights) model.summary()