【发布时间】:2019-02-25 14:15:05
【问题描述】:
我用 Keras 做分类任务,我在 Keras 中制作了简单的自定义损失函数,它可以工作
import keras.backend as K
def customLoss(yTrue,yPred):
return K.abs(yTrue-yPred)
为了制作我想要的更复杂的损失函数,我需要计算真阳性、真阴性、假阳性、假阴性
如何计算它们?
我无法计算它们,因为我不知道 yTrue 和 yPred 的类型。它们是二维数组还是列表或其他任何东西。如果我知道,也许我可以使用 for 计算 TP,TN,FP,FN,如下所示:
TP=0
for x,y in zip(yTrue,yPred):
if x == 1 and y > 0.5:
TP=TP+1
【问题讨论】:
-
即使你可以定义一个带有True Positives、True Negatives等的损失函数,它也可能对训练不起作用。这是因为损失函数需要是连续的,因此优化器可以判断模型中的微小变化是否会使损失变得无限好或更坏。由于您的训练示例数量有限,因此 TP/TN/FP/FN 之类的量会在离散的跳跃中移动,这使得优化器很可能无法找到任何有用的东西。看看使用分类交叉熵作为损失函数,然后使用上面的自定义函数作为指标。
-
我真正的问题是我想要比召回更大的精度,例如精度 = 0.9 和召回 = 0.5,而不是精度 = 0.5 和召回 = 0.9,如何构建“理解”我的损失函数需要吗?
标签: python machine-learning keras deep-learning