取决于输入功能的Keras自定义损失函数

时间:2019-09-24 08:36:03

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

我遇到一个带有K标签的多标签分类问题,并且我有一个函数,我们将其称为f,对于数据集中的每个示例,它采用两个矩阵,我们将它们称为{{1} }和H。这两个矩阵都是输入数据的一部分。

对于标签P的每个向量(例如,一个例子),即y是维数为y的向量,我计算出标量值(K \times 1)

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

看到Keras的文档,我知道定制的损失函数以f_out_pred = f(H, P, y_pred)的形式出现,但是,我要定义的损失函数取决于输入数据以及这些值custmLoss(y_pred, y_true)和{{ 1}}需要逐个示例地计算,以形成两个向量,以使平均绝对百分比误差最小。

1 个答案:

答案 0 :(得分:2)

据我所知,除模型输出和相应的基本事实外,没有任何方法可以使损失函数不接受任何其他函数。因此,执行所需操作的唯一方法是使输入成为模型输出的一部分。为此,只需使用功能性API构建模型,然后将输入张量添加到输出列表中即可:

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方面没有太多的经验,因此很难更具体,但是希望这可以为您指明正确的方向。