Keras自定义损失函数,带有来自拟合发生器的多个参数

时间:2019-12-13 14:07:15

标签: python keras loss-function

我想创建一个自定义损失,该损失从数据生成器获取网络输出和多个参数。

我发现了this文章,该文章描述了如何使用一个标签从多层计算一个损失。但是我想使用fit_generator从具有多个标签的单层计算损耗。我的问题是Keras期望输出和标签的形状相同。

示例:

常规海关损失:

def custom_loss(y_pred, y_label):
        return K.mean(y_pred - y_label)

我要使用的自定义损失类型的示例:

def custom_loss(y_pred, y_label, y_weights):
     loss = K.mean(y_pred - y_label)
     return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)

这只是一个示例,我的原始代码稍微复杂一点。我只想能够为损失函数提供两个参数(y_label和y_weights),而不是仅一个参数(y_label)。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不确定您到底要问什么,但也许您可以使用。您可以尝试使用类似自定义函数的函数,该函数返回损失函数。

def custom_loss(y_weights):

    # Create a loss function that calculates what you want
    def example_loss(y_true,y_pred):
        loss = K.mean(y_pred - y_label)
        return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)

    # Return a function
    return example_loss

# Compile the model
model.compile(optimizer='adam',
          loss=custom_loss(y_weights), # Call the loss function with the preferred weights
          metrics=['accuracy'])

您还可以查看this问题