Pytorch tversky损失函数

楼主最近疯狂Pytorch
做的项目是关于冠状动脉血管分割的
看了很多论文,建议修改loss函数解决不平衡的分类目标
但是只要换成默认的BCEloss
网络训练的dice指数一直是0。。。
。。。
。。。
。。。
只能勉强用微笑掩盖自己的泪水
疯了好久
。。。
。。。
只要换掉默认的BCE损失函数
训练的dice指数bee为0
且不随时间改变
稳定的程度简直让我!@#¥%……&**…………%#
直到看见了这篇博文
传送门

写的东西简直太棒了,
从原理到使用
以及keras源码
我疯狂推崇该篇博文

以下是我实现的pytorch版本的其中我需要的tversky损失函数:

def tversky_loss(inputs, targets, beta=0.7, weights=None):
    batch_size = targets.size(0)
    loss = 0.0

    for i in range(batch_size):
        prob = inputs[i]
        ref = targets[i]

        alpha = 1.0-beta

        tp = (ref*prob).sum()
        fp = ((1-ref)*prob).sum()
        fn = (ref*(1-prob)).sum()
        tversky = tp/(tp + alpha*fp + beta*fn)
        loss = loss + (1-tversky)
    return loss/batch_size

呕心沥血写这个损失函数
看上去没几行
花了足足三天。。。
太难了
不是看代码看不懂
而是别人的代码都是加了什么fastai和inferno库的
我还特别笨,集成不上这两个库
要是对你有帮助了,记得随手刘赞

你可能感兴趣的:(深度学习,pytorch,损失函数)