在tf.keras中创建自定义损失函数

时间:2019-06-15 15:47:34

标签: python-3.x tensorflow keras

我正在学习深度学习中使用的各种损失函数。我需要一些帮助在tensorflow中实现自定义损失函数。为了对此有一个具体的了解,我以一个自定义的二进制交叉熵损失为例。

非常感谢您的帮助

致谢

编辑: 以下是我已实现的损失函数:

def custom_loss(eps):
    def loss(y_true, y_pred):
        ans = -eps*(y_true*tf.log(y_pred) + (1-y_true)*tf.log(y_pred))
        return ans
    return loss

一段时间后,此函数未返回任何数字。我试图向日志功能添加少量。此外,我已将优化器更改为adam。

1 个答案:

答案 0 :(得分:1)

我认为每当y_pred == 0时,这都是数值计算的问题。

请注意,log(0)是未定义的,因此,为了使我们的损失计算在数值上稳定,我们倾向于进行tf.log(y_pred + epsilon),其中epsilon是一个很小的数字,其影响可忽略不计关于损失,但在尝试除以零(或执行log(0))时避免返回NaN。

我假设这是您使用eps参数要实现的目标,但是您应该将其放在对tf.log()的调用中。

也许是这样的:

def custom_loss(eps):
    def loss(y_true, y_pred):
        ans = -(y_true*tf.log(y_pred + eps) + (1-y_true)*tf.log(y_pred + eps))
        return ans
    return loss