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())
回复
我来回复-
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
但请确保每次进入此部分时将
count
和loss
重置为 0。2年前