楼主最近疯狂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库的
我还特别笨,集成不上这两个库
要是对你有帮助了,记得随手刘赞