【发布时间】:2020-07-08 22:05:57
【问题描述】:
是否有人有令人信服的解决方案来使 custom_binarycrossentropy 起作用?
我尝试了所有可能的方法(甚至使整个训练数据大小与 bacth 大小相同,以消除批量处理期间对全局平均的依赖。)。但我发现我的二进制交叉熵实现与 keras 的实现之间存在显着差异(通过指定 loss = 'binary_crossentropy')
我的crustom二进制交叉熵代码如下
def _loss_tensor(y_true, y_pred):
y_pred = K.clip(y_pred, _EPSILON, 1.0-_EPSILON)
out = (y_true * K.log(y_pred) + (1.0 - y_true) * K.log(1.0 - y_pred))
return -K.mean(out)
def _loss_tensor2(y_true, y_pred):
y_pred = K.clip(y_pred, _EPSILON, 1.0-_EPSILON)
out = -(y_true * K.log(y_pred) + -(1.0 - y_true) * K.log(1.0 - y_pred))
return out
def _loss_tensor2(y_true, y_pred):
loss1 = K.binary_crossentropy(y_true, y_pred)
return loss1
这些方法都不起作用。即使我在返回自定义损失函数的结果之前执行 K.mean(),它也不起作用。
我无法理解使用 loss = 'binary_crossentropy' 有什么特别之处。当我使用我的自定义损失函数时,训练很糟糕,它确实按预期工作。
我需要我的自定义损失函数来根据错误来操纵损失函数并更多地惩罚某种类型的分类错误。
【问题讨论】:
标签: tensorflow keras backend loss