我遇到一个带有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}}需要逐个示例地计算,以形成两个向量,以使平均绝对百分比误差最小。
答案 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方面没有太多的经验,因此很难更具体,但是希望这可以为您指明正确的方向。