Deep learning 培训损失从第一个培训示例开始爆炸,然后输出nan

Deep learning 培训损失从第一个培训示例开始爆炸,然后输出nan,deep-learning,computer-vision,conv-neural-network,pytorch,pose-estimation,Deep Learning,Computer Vision,Conv Neural Network,Pytorch,Pose Estimation,我是深度学习的新手,我已经构建了一些基本的CNN,但这次我尝试构建类似于Yolo3的FCN(完全卷积网络)。我的网络包含32层,LeakyRelu作为激活函数和adam优化器。共有680个数据样本,输入图像大小为416x416,与yolo型号相同。我在下面给出了一些我的代码片段 我正在使用Pytorch 1.1和cuda 9版本。 我在许多博客中尝试了不同的学习率,如0.0001、0.000001、0.0000001,也尝试了不同的beta,如(0.9,0.999)、(0.5,0.999)等等。

我是深度学习的新手,我已经构建了一些基本的CNN,但这次我尝试构建类似于Yolo3的FCN(完全卷积网络)。我的网络包含32层,LeakyRelu作为激活函数和adam优化器。共有680个数据样本,输入图像大小为416x416,与yolo型号相同。我在下面给出了一些我的代码片段

我正在使用Pytorch 1.1和cuda 9版本。 我在许多博客中尝试了不同的学习率,如0.0001、0.000001、0.0000001,也尝试了不同的beta,如(0.9,0.999)、(0.5,0.999)等等。我也尝试了长时间的训练,最多200个时代

输出
运行损耗:59102027776.0

0%| | 1/630 [00:19你能发布你的损失函数的代码吗?很可能在那里的某个地方有错误。或者更好,发布整个培训代码,这样人们就可以了解你在做什么。嗨@FlorianBlume谢谢你的回复,我添加了损失函数代码。从损失函数的实现中,很难看出你在做什么e试着这么做,但你以前用文字解释也没用。你能不能把你的损失再作为一个公式(也许是乳胶图像或是为了可读性的东西)并用文字解释您试图实现的目标?取决于您网络输出的维度
火炬。mul
可能导致
NaN
。尝试将损失扩展为多个步骤,并尝试查看
NaN
发生的位置。您好,@FlorianBlume再次感谢,我在上面添加了损失函数图片,请检查。这是我的第一篇帖子,我可能遗漏了一些重要的细节,我正在尽我最大的努力解释清楚。你是否规范了输入?你能发布你的损失函数的代码吗?那里可能有一个错误。或者更好的是,发布整个培训代码,以便人们可以了解你在做什么。嗨@FlorianBlume谢谢你的帮助我们的回答是,我添加了损失函数代码。从损失函数的实现中读取您试图执行的操作有点困难,但您以前的文字解释也没有帮助。您能否再次将您的损失作为公式给出(可能是LaTeX图像或其他可读性方面的内容)并用文字解释您试图实现的目标?取决于您网络输出的维度
火炬。mul
可能导致
NaN
。尝试将损失扩展为多个步骤,并尝试查看
NaN
发生的位置。您好,@FlorianBlume再次感谢,我在上面添加了损失函数图片,请检查.这是我的第一篇帖子,我可能遗漏了一些重要的细节,我正在尽力解释得更清楚。你把输入规范化了吗?
masked_pose_loss = torch.mean(
        torch.sum(mask * torch.sum(torch.mul(pred - true, pred - true), dim=[1, 2]), dim=[1, 2, 3]))
    self.relu1_1 = nn.LeakyReLU(inplace=True)
    self.conv1_2 = nn.Conv2d(32, 64, 3, stride=1,padding=1)
    self.relu1_2 = nn.LeakyReLU(inplace=True)
    self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)

    # conv2

    self.conv2_1 = nn.Conv2d(64, 128, 3, stride=1, padding=1)
    self.relu2_1 = nn.LeakyReLU(inplace=True)
    self.conv2_2 = nn.Conv2d(128, 64, 1, stride=1)
    self.relu2_2 = nn.LeakyReLU(inplace=True)
    self.pool2 = nn.MaxPool2d(2, stride=2, ceil_mode=True)

    # conv3
    self.conv3_1 = nn.Conv2d(64, 128, 3, stride=1, padding=1)
    self.relu3_1 = nn.LeakyReLU(inplace=True)
    self.conv3_2 = nn.Conv2d(128, 256, 3, stride=1, padding=1)
    self.relu3_2 = nn.LeakyReLU(inplace=True)
    self.conv3_3 = nn.Conv2d(256, 128, 1, stride=1)
    self.relu3_3 = nn.LeakyReLU(inplace=True)
    self.pool3 = nn.MaxPool2d(2, stride=2, ceil_mode=True)

    # conv4
    self.conv4_1 = nn.Conv2d(128, 256, 3, stride=1, padding=1)
    self.relu4_1 = nn.LeakyReLU(inplace=True)
    self.conv4_2 = nn.Conv2d(256, 512, 3, stride=1, padding=1)
    self.relu4_2 = nn.LeakyReLU(inplace=True)
    self.conv4_3 = nn.Conv2d(512, 256, 1, stride=1)
    self.relu4_3 = nn.LeakyReLU(inplace=True)
    self.pool4 = nn.MaxPool2d(2, stride=2, ceil_mode=True)

    # conv5
    self.conv5_1 = nn.Conv2d(256, 512, 3, stride=1, padding=1)
    self.relu5_1 = nn.LeakyReLU(inplace=True)
    self.conv5_2 = nn.Conv2d(512, 256, 1, stride=1)
    self.relu5_2 = nn.LeakyReLU(inplace=True)
    self.conv5_3 = nn.Conv2d(256, 512, 3, stride=1, padding=1)
    self.relu5_3 = nn.LeakyReLU(inplace=True)
    self.pool5 = nn.MaxPool2d(2, stride=2, ceil_mode=True)

    # fc6

    self.conv6_1 = nn.Conv2d(512, 1024, 3, stride=1, padding=1)
    self.relu6_1 = nn.LeakyReLU(inplace=True)
    self.conv6_2 = nn.Conv2d(1024, 512, 1, stride=1)
    self.relu6_2 = nn.LeakyReLU(inplace=True)
    self.conv6_3 = nn.Conv2d(512, 1024, 3, stride=1, padding=1)
    self.relu6_3 = nn.LeakyReLU(inplace=True)
    self.conv7_1 = nn.Conv2d(1024, 512, 1, stride=1)
    self.relu7_1 = nn.LeakyReLU(inplace=True)
    self.conv7_2 = nn.Conv2d(512, 1024, 3, stride=1, padding=1)
    self.relu7_2 = nn.LeakyReLU(inplace=True)
    self.conv7_3 = nn.Conv2d(1024, 1024, 3, stride=1, padding=1)
    self.relu7_3 = nn.LeakyReLU(inplace=True)
    self.conv8_1 = nn.Conv2d(1024, 1024, 3, stride=1, padding=1)
    self.relu8_1 = nn.LeakyReLU(inplace=True)
    self.conv8_2 = nn.Conv2d(1024, 1024, 3, stride=1)
    self.conv8_2 = nn.ReLU(inplace=True)
    self.conv_rout16 = nn.Conv2d(512, 64, 1, stride=1)
    self.relu_rout16 = nn.ReLU(inplace=True)enter code here


    # Resuming comments: I was implementing last two layer of network:
    self.convf_1 = nn.Conv2d(1280, 1024, 3, stride=1, padding=1)
    self.reluf_1 = nn.LeakyReLU(inplace=True)

    self.convf_2 = nn.Conv2d(1024, self.target_channel_size, 1, stride=1)

    self.reluf_2 = nn.LeakyReLU(inplace=True)