我尝试编写一个自定义的二元交叉熵损失函数。这是我的脚本:
def my_custom_loss(y_true,y_pred):
t_loss = (-1)*(y_true * K.log(y_pred) + (1 - y_true) * K.log(1 - y_pred))
return K.mean(t_loss)
当我使用该损失函数运行我的脚本时,经过几次迭代后,损失函数的输出为 NaN。
然后我查看了TensorFlow文档,将损失函数修改为以下内容:
t_loss = K.max(y_pred,0)-y_pred * y_true + K.log(1+K.exp((-1)*K.abs(y_pred)))
这段代码没有问题。
我想知道为什么我的第一个损失函数会输出NaN,希望有人能提供一些解释。
二元交叉熵: y * log(p) + (1-y) * log(1-p)
我在最后一层使用了sigmoid函数作为激活函数。因此'p'的值应该在0到1之间。对于这个范围,log应该存在。
谢谢。