关于具有自定义损失的3输出ANN的加权

时间:2019-02-11 09:06:31

标签: python keras

我正在尝试定义一个自定义损失函数,该函数在回归模型中包含3个输出变量。

def custom_loss(y_true, y_pred):
    y_true_c = K.cast(y_true, 'float32')  # Shape=(batch_size, 3)
    y_pred_c = K.cast(y_pred, 'float32')  # Shape=(batch_size, 3)

    # Compute error
    num = K.abs(y_true_c - y_pred_c)  # Shape=(batch_size, 3)
    den = K.maximum(y_true_c, y_pred_c)   # Shape=(batch_size, 3)
    err = K.sum(num / den, axis=-1)  # Shape=(batch_size,)

    # Output loss
    return K.mean(err)

在求和到单个损失值之前,如何权衡3个输出给定的3个损失?

我的model.compile()语句当前为:

model.compile(loss=custom_loss, metrics=['mse'],optimizer=optimizer, loss_weights=[0.25,0.5,0.25])

在这里,我尝试分别为3个输出分别加权0.25、0.5、0.25(总和为1)。但是我认为此工具可能不适用于自定义损失功能。

我该如何实现?

1 个答案:

答案 0 :(得分:1)

您可以按如下方式向您的自定义损失传递一个额外的参数import pandas as pd df = pd.read_table(filename, names=["S"]) print(df["S"].str.replace(",", "."))

0    2017-09-05 15:55:44.958 - Alarm: Shelter Inver...
1    2017-09-05 15:55:44.966 - Alarm: Shelter Batte...
Name: S, dtype: object

然后按如下所示编译模型:

weights

注意:未测试。