Pytorch重复损失和AUC-使用累积损失时

扎眼的阳光 pytorch 200

原文标题Pytorch Repeating loss and AUC- When using cumulative loss

我是使用 PyTorch 来累积和添加损失,然后在最后实现反向传播(loss.backward())。

此时,loss没有更新,几乎保持不变,AUC重复完全相同。使用累积损失时,有没有我没有考虑过的点?

非常感谢您的回复。 :)

以下是一批中发生的损失计算。

            opt.zero_grad()
            for s in range(len(qshft)): 
              for a in range(len(qshft[0])):
                if(m[s][a]):
                  y_pred = (y[s][a] * one_hot(qshft[s].long(), self.num_q)).sum(-1)
                  y_pred = torch.masked_select(y_pred, m[s])
                  t = torch.masked_select(rshft[s], m[s])
                  loss += binary_cross_entropy(y_pred, t).clone().detach().requires_grad_(True)
                  count += 1
            
            loss = torch.tensor(loss/count,requires_grad=True)


            loss.backward()
            opt.step()

            loss_mean.append(loss.detach().cpu().numpy())

原文链接:https://stackoverflow.com//questions/71948969/pytorch-repeating-loss-and-auc-when-using-cumulative-loss

回复

我来回复
  • joe32140的头像
    joe32140 评论

    您的以下操作detach删除了计算图,因此loss.backward()opt.step()不会更新您的权重,从而导致重复损失和 AUC。

    loss += binary_cross_entropy(y_pred, t).clone().detach().requires_grad_(True)
    

    你可以做

    loss += binary_cross_entropy(y_pred, t)
    

    和改变

    loss = torch.tensor(loss/count,requires_grad=True)
    

    loss = loss/count
    

    但请确保每次进入此部分时将countloss重置为 0。

    2年前 0条评论