问题描述
我正在尝试使用Lightning在PyTorch中使用Ternausnet在Carvana数据集上重现unet结果。
我正在使用具有S型激活功能的DiceLoss。我认为我遇到了一个消失的梯度问题,因为所有权重的梯度均为0,并且我看到最小值为10 ^ 8的网络输出。
这里可能是什么问题?如何解决消失的梯度?另外,如果我使用其他标准,则会发现损失不停止就变成负值的问题(例如,对于具有logits的BCE)。
这是我骰子丢失的代码:
class DiceLoss(nn.Module):
def __init__(self):
super().__init__()
def forward(self,logits,targets,eps=0,threshold=None):
# comment out if your model contains a sigmoid or
# equivalent activation layer
proba = torch.sigmoid(logits)
proba = proba.view(proba.shape[0],1,-1)
targets = targets.view(targets.shape[0],-1)
if threshold:
proba = (proba > threshold).float()
# flatten label and prediction tensors
intersection = torch.sum(proba * targets,dim=1)
summation = torch.sum(proba,dim=1) + torch.sum(targets,dim=1)
dice = (2.0 * intersection + eps) / (summation + eps)
# print(intersection,summation,dice)
return (1 - dice).mean()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)