【问题标题】:Keras custom loss function that depends on the input features依赖于输入特征的 Keras 自定义损失函数
【发布时间】:2020-01-24 08:05:09
【问题描述】:

我有一个带有K 标签的多标签分类问题,而且我有一个函数,我们称之为f,它对于数据集中的每个示例都有两个矩阵,我们称之为HP。两个矩阵都是输入数据的一部分。

对于标签y的每个向量(例如),即y是一个维度为(K \times 1)的向量,我计算一个标量值f_out = f(H, P, y)

对于所有示例,我想定义一个损失函数,以最小化由值 f_out_true = f(H, P, y_true)f_out_pred = f(H, P, y_pred) 形成的两个向量之间的平均绝对百分比误差。

看到Keras的文档,我知道自定义损失函数的形式是custmLoss(y_pred, y_true),但是我要定义的损失函数取决于输入数据,这些值f_out_truef_out_pred需要是逐个示例计算以形成我想要最小化平均绝对百分比误差的两个向量。

【问题讨论】:

    标签: keras neural-network loss-function multilabel-classification


    【解决方案1】:

    就我所知,无法制造丢失功能,这些损失函数除了模型输出和相应的地面真相之外。因此,执行您想要的唯一方法是制作模型输出的输入部分。为此,只需使用功能API构建模型,然后将输入Tensor添加到输出列表中:

    input = Input(input_shape)
    
    # build the rest of your model with the standard functional API here
    # this example model was taken from the Keras docs
    x = Dense(100, activation='relu')(input)
    x = Dense(100, activation='relu')(x)
    x = Dense(100, activation='relu')(x)
    output = Dense(10, activation='softmax')(x)
    
    model = Model(inputs=[input], outputs=[output, input])
    

    然后,使y_true组合输入数据和原始地面真相。

    我没有功能性API的全部经验,所以很难更具体,但希望这对你朝着正确的方向指出。

    【讨论】:

    • 谢谢@theguywithehehat为您的建议,但只是看我很了解你,x在你的代码中是原始的地面真相,对吧? span>
    • @ jeremy @ 987654323是使用功能API构建模型的主输出。我编辑了我的答案,给出了一个更具体的例子。 span>
    • 感谢您澄清这一点。所以现在,如果我想定义自定义丢失函数,那么我会做这样的事情:def customloss(y_pred,y_true):#get预测preds = y_pred [0] #get输入数据输入= y_pred [1]#继续函数的定义..... span>
    猜你喜欢
    • 2016-12-05
    • 2019-08-22
    • 2021-05-23
    • 2018-06-04
    • 1970-01-01
    • 2020-12-19
    • 2017-12-18
    • 2020-03-27
    • 1970-01-01
    相关资源
    最近更新 更多