我正在学习深度学习中使用的各种损失函数。我需要一些帮助在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。
答案 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