查看: 1558|回复: 1

Pytorch新手,新写了个loss函数,运行报错,有高手知道怎么...

[复制链接]

10

主题

57

帖子

143

积分

注册会员

Rank: 2

积分
143
发表于 2018-10-15 16:12:27 | 显示全部楼层 |阅读模式
RuntimeError: there are no graph nodes that require computing gradients


我把阈值>0.5去掉就没有问题
代码如下:
  1. class DiceLoss(nn.Module):
  2. def __init__(self):
  3. super(DiceLoss, self).__init__()
  4. self.sigmoid = nn.Sigmoid()

  5. def forward(self, output, labels):

  6. batch_size = labels.size(0)

  7. Sigmoidout = self.sigmoid(output) > 0.5

  8. loss = 0

  9. for i in range(batch_size):

  10. sampleloss = -(2.0*torch.sum(torch.mul(Sigmoidout[i,:],labels[i,:])) + 1e-5)/(torch.sum(labels[i,:]) + torch.sum(Sigmoidout[i,:]) + 1e-5)

  11. loss += sampleloss

  12. meanloss = loss/batch_size

  13. return meanloss
复制代码


回复

使用道具 举报

44

主题

139

帖子

382

积分

论坛管理

Rank: 4

积分
382
发表于 2018-10-15 16:14:37 | 显示全部楼层
虽然没有贴完整的代码和关键的代码,但是,损失函数的第一项是网络的输出,而不是:
  1. criterion = nn.SmoothL1Loss()
  2. loss = criterion(input, target)
复制代码

以上是错的,以下是对的:
  1. criterion = nn.SmoothL1Loss()
  2. loss = criterion(output, target)
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表