【问题标题】:I am trying to build custom loss function in pytorch, but I am getting nan loss and accuracy is not improving我正在尝试在 pytorch 中构建自定义损失函数,但是我得到了 nan 损失并且准确性没有提高
【发布时间】:2022-01-19 02:54:49
【问题描述】:
class crossentropy(nn.Module):
    def __init__(self):
        super(crossentropy, self).__init__()

    def forward(self, y_1, y):
        m = nn.Softmax(dim=1)
        output = m(y_1)
        loss = -1.0*torch.sum(y*torch.log(output))
        l = torch.mean(loss)
        return l

【问题讨论】:

  • 有两种可能的情况,要么y或y_1的某些元素是NaN,要么输出的元素太接近0
  • 无论如何,你应该使用LogSoftmax而不是取softmax的日志,这样可以避免第二种情况
  • m 应在__init__ 中创建为self.m = ...
  • 您是否尝试过将您的 crossentropy 类替换为标准类并查看是否仍然不起作用?

标签: python deep-learning pytorch cross-entropy


【解决方案1】:

很可能使用LogSoftmax而不是Softmax然后log应该可以解决这个问题(可能是由于数值错误,日志给softmax的接近0结果提供了无限值)

【讨论】:

  • 类交叉熵(nn.Module): def __init__(self,m=0): super(crossentropy, self).__init__() self.m = m def forward(self, y_1, y) : m = self.mm = nn.LogSoftmax() output = m(y_1) loss = -1.0*torch.sum(y*output) l = torch.mean(loss) return l
  • 它仍然给出相同的错误,我尝试删除日志,它给出了良好的准确度得分和负损失
  • 还是楠? LogSoftmax 的输出是什么?
猜你喜欢
  • 2019-11-12
  • 2019-03-13
  • 2019-05-27
  • 2017-05-01
  • 2021-02-20
  • 2020-12-05
  • 2021-11-13
  • 2019-05-22
  • 2019-01-18
相关资源
最近更新 更多