用java异常完成丢色子功能,多类分割的广义骰子损失:keras实现

我刚刚在keras中实现了广义骰子丢失(骰子丢失的多级版本),如ref中所述:

(我的目标定义为:(batch_size,image_dim1,image_dim2,image_dim3,nb_of_classes))

def generalized_dice_loss_w(y_true, y_pred):

# Compute weights: "the contribution of each label is corrected by the inverse of its volume"

Ncl = y_pred.shape[-1]

w = np.zeros((Ncl,))

for l in range(0,Ncl): w[l] = np.sum( np.asarray(y_true[:,:,:,:,l]==1,np.int8) )

w = 1/(w**2+0.00001)

# Compute gen dice coef:

numerator = y_true*y_pred

numerator = w*K.sum(numerator,(0,1,2,3))

numerator = K.sum(numerator)

denominator = y_true+y_pred

denominator = w*K.sum(denominator,(0,1,2,3))

denominator = K.sum(denominator)

gen_dice_coef = numerator/denominator

return 1-2*gen_dice_coef

但事情肯定是错的 . 我正在使用3D图像,我必须分为4个类(1个背景类和3个对象类,我有一个不 balancer 的数据集) . 第一个奇怪的事情:虽然我的训练中的火车损失和准确性得到了提高(并且收敛速度非常快),但我的验证损失/准确性是不变的时期(见image) . 其次,在预测测试数据时,只预测背景类:我得到一个恒定的音量 .

我使用完全相同的数据和脚本但具有分类交叉熵损失并得到合理的结果(对象类被分段) . 这意味着我的实施出了问题 . 知道它可能是什么?

另外我相信对于keras社区来说,有一个广义的骰子丢失实现是有用的,因为它似乎在大多数最近的语义分割任务中使用(至少在医学图像社区中) .

PS:我觉得如何定义权重似乎很奇怪;我得到大约10 ^ -10的值 . 还有其他人试图实现这个吗?我也测试了我的功能没有重量,但同样的问题 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值