图像分割中dc_loss忽视标签实现

实现:

>>> import torch
>>> from torch import nn
>>> input = torch.randn([3,3], requires_grad=True)
>>> target = torch.empty([3,3]).random_(2)
>>> mask = torch.Tensor([[0.,0.,1.],[0.,0.,1],[1.,1.,1.]])
>>> input
tensor([[ 1.5863,  2.4546,  1.7292],
        [-0.5053,  0.4821,  0.2166],
        [-0.0112,  0.8775, -1.9882]], requires_grad=True)
>>> target
tensor([[1., 1., 0.],
        [1., 0., 1.],
        [1., 1., 0.]])
>>> mask
tensor([[0., 0., 1.],
        [0., 0., 1.],
        [1., 1., 1.]])
>>> input_s=input.sigmoid()
>>> input_s
tensor([[0.8301, 0.9209, 0.8493],
        [0.3763, 0.6182, 0.5539],
        [0.4972, 0.7063, 0.1204]], grad_fn=<SigmoidBackward>)

>>> i,u=[t.sum() for t in [input_s* target, input_s+target]]
>>> i
tensor(3.8847, grad_fn=<SumBackward0>)
>>> u
tensor(11.4727, grad_fn=<SumBackward0>)


>>> input_s1=torch.Tensor([r for r,rm in zip(input_s.flatten(),mask.flatten()) if rm==1])
>>> target1=torch.Tensor([r for r,rm in zip(target.flatten(),mask.flatten()) if rm==1])
>>> input_s1
tensor([0.8493, 0.5539, 0.4972, 0.7063, 0.1204])
>>> target1
tensor([0., 1., 1., 1., 0.])

>>> i1,u1=[t.sum() for t in [input_s1* target1, input_s1+target1]]
>>> i1
tensor(1.7575)
>>> u1
tensor(5.7272)

>>> input_s2=input_s*mask
>>> target2=target*mask
>>> i2,u2=[t.sum() for t in [input_s2* target2, input_s2+target2]]
>>> i2
tensor(1.7575, grad_fn=<SumBackward0>)
>>> u2
tensor(5.7272, grad_fn=<SumBackward0>)

>>> dc = (2 * i2 + 1) / (u2 + 1)
>>> dc = 1 - dc.mean()
>>> dc
tensor(0.3289, grad_fn=<RsubBackward1>)




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值