2024-04-29 08:19:44 发布
网友
我试图训练一个多类分割的网络,我想用骰子系数(见this)代替交叉熵作为损失函数。在
你可以看看公式here(其中S是分段,G是基本真理。)
一个简单的简单解决方案是取每个类的骰子系数的平均值,并将其用于损失函数。这种方法不会区分面积较大的类和像素数较少的类(体素)。在
有人有什么建议吗?在
如果您有多个类,并且这些类是没有序数关系的范畴,e.x.我们并不暗示dog小于cat,因为我们分别设置了标签1和{},那么您应该已经在使用一个热编码标签了。所以,你可以用下面的函数计算骰子系数
dog
cat
1
import numpy as np def dice_coef(y_true, y_pred, epsilon=1e-6): """Altered Sorensen–Dice coefficient with epsilon for smoothing.""" y_true_flatten = np.asarray(y_true).astype(np.bool) y_pred_flatten = np.asarray(y_pred).astype(np.bool) if not np.sum(y_true_flatten) + np.sum(y_pred_flatten): return 1.0 return (2. * np.sum(y_true_flatten * y_pred_flatten)) /\ (np.sum(y_true_flatten) + np.sum(y_pred_flatten) + epsilon)
这里额外的一点是,如果预测的和真的标签都是空的,我们得到1。在
如果您有多个类,并且这些类是没有序数关系的范畴,e.x.我们并不暗示},那么您应该已经在使用一个热编码标签了。所以,你可以用下面的函数计算骰子系数
dog
小于cat
,因为我们分别设置了标签1
和{这里额外的一点是,如果预测的和真的标签都是空的,我们得到
1
。在相关问题 更多 >
编程相关推荐