依赖于输入特征的 Keras 自定义损失函数

Keras custom loss function that depends on the input features

我有一个带有 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 需要逐个示例计算以形成我想要最小化平均绝对百分比误差的两个向量。

据我所知,除了模型输出和相应的基本事实之外,没有办法制作一个损失函数。所以,做你想做的唯一方法就是让输入成为你模型输出的一部分。为此,只需使用函数 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 没有太多经验,所以很难说得更具体,但希望这能为您指明正确的方向。