【问题标题】:Custom reduction of losses within each batch in Keras在 Keras 中自定义减少每批次的损失
【发布时间】:2021-12-02 20:33:37
【问题描述】:

我在Python 中将keras 用于tensorflow。我有一个自定义损失函数,它为批次中的每个样本返回一个数字(所以一个长度 = 批量大小的向量)。我如何还可以指定自定义减少方法来将这些样本损失汇总为整个批次的单个损失?是否可以在自定义损失函数中包含这种减少并让该函数仅返回单个标量而不是损失向量?

【问题讨论】:

  • 据我所知,将批次中所有元素的损失减少到损失函数中完整批次的单个数字是完全可以的。

标签: python tensorflow keras loss-function


【解决方案1】:

这实际上取决于您的应用程序和目标。一种非常常见的方法是对批量大小产生的损失执行 reduce_mean。有些还使用reduce_sum,这当然使损失值取决于批量大小。一种通用的(可能是不必要的复杂)方法可能是使用一个函数来调用您想要的函数,从而将批量损失减少到单个值。我们称它为减速器。在你的损失函数中,在最后一行,你可以在 return 之前调用它:

class my_loss(keras.losses.Loss):
    def __init__(self, inputs)
        # a bunch of assignments
        self.reducer = self._get_reducer_function(inputs) (or a normal mean function)

    def call(self, y_true, y_pred):
            y_batch = ....
            return self.reducer(y_batch)

    def get_config(self):
            return {'input': 1}

当然你不需要写得那么复杂,但它应该让你知道如何去做。此外,如果需要,您可以简单地添加 sample_weights。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多