代码之家  ›  专栏  ›  技术社区  ›  Jim Chen

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

  •  1
  • Jim Chen  · 技术社区  · 7 年前

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

    我找到了一个解决办法 here

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

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jim Chen    4 年前

    只需删除自定义损失的数量,它就可以完美运行。 #我的损失

    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
    

    ##以前 } lossWeights={“临时输出”:1.0,“时间输出”:1.0} model.summary()

    ##之后 损失={ “时间输出”:每分钟一次, } lossWeights={“临时输出”:1.0,“时间输出”:1.0} compile(optimizer='adam',loss=loss,loss\u weights=lossWeights)