为什么卷积网络的输出如此大?

问题描述

我正在尝试使用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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...