为了最大程度地减少两个集合/集的重叠而造成的损失

时间:2018-07-10 00:37:32

标签: tensorflow machine-learning pytorch loss-function loss

我想知道是否有损失函数可以测量两个集合/集合的重叠(顺序无关紧要)。 例如。基本真理是集合[a,b,c],我的模型预测是集合[b,e,f],重叠是[b]。我的目标是使预测的重叠最大化。 我们是否有一个损失函数可以测量重叠的大小,我可以最小化该指标(而不是该指标),因此可以最大化重叠。 (我知道一种解决方案可以遵循REIFORCE学习,该解决方案将重叠作为每个数据样本的奖励,并使用奖励来权衡损失,但是我们有另一种解决方案) 谢谢。

2 个答案:

答案 0 :(得分:1)

如P-Gn所指出的,这种系数的问题在于它们的可微性。 但是,可以为这些可微分的系数定义相似的度量。 Prune提出的IOU(工会交集)是一个很好的措施。对于深度学习任务而言,更流行的是相似的骰子系数:

$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -Wmissing-prototypes -Wstrict-prototypes \
>     mtx29.c -o mtx29
$

如果没有重叠,则范围为0;对于相同的集合,范围为1。 对于二元向量,可以表示为

2 * len(A intersect B)/(len(A)+ len(B))

其中向量是集合的一热编码表示。

现在,如果神经网络中的最后一层具有softmax激活(例如使用交叉熵时),则可以将输出解释为属于您的预测集合的特定元素的概率。先前的公式仍然可以很好地度量集合之间的交集,但仍可区分。在此paper中首先引入了所谓的骰子损失(骰子系数为1),您可以在其中了解更多信息。

答案 1 :(得分:0)

该指标没有预先定义的损失函数;您必须自己编写。但是,设置重叠量度很容易找到。例如,struct datum { unsigned char guid[16]; enum { Int, Float } measurement_kind; union { int i; float f; } measurement; time_t timestamp; enum { Good, Bad, Unknown } quality; }; 很简单:没有重叠是0.0;等于1.0;您的情况将是0.2:20%的可用元素重叠。

这会让你动起来吗?