Python 稍微将L1损耗调整为Pytorch中的加权L1损耗,梯度计算是否仍然正常工作?

Python 稍微将L1损耗调整为Pytorch中的加权L1损耗,梯度计算是否仍然正常工作?,python,pytorch,Python,Pytorch,我在Pytorch中实现了一个神经网络,我想使用加权L1损失函数来训练网络 对于每个历元,具有常规L1损失的实现包含以下代码: optimiser.zero_grad() net.train() _,forecast = net(torch.tensor(feature, dtype=torch.float).to(DEVICE)) loss = F.l1_loss(forecast, torch.tensor(target,dtype=torch.float).to(DEVIC

我在Pytorch中实现了一个神经网络,我想使用加权L1损失函数来训练网络

对于每个历元,具有常规L1损失的实现包含以下代码:

optimiser.zero_grad()
net.train()        
_,forecast = net(torch.tensor(feature, dtype=torch.float).to(DEVICE))
loss = F.l1_loss(forecast, torch.tensor(target,dtype=torch.float).to(DEVICE),reduction='mean')
loss.backward()
params.append(net.parameters())
optimiser.step()
现在我想用加权L1损失来代替。因此,我想再次使用相同的标准Pytorch L1函数,并使用权重重新缩放预测和目标。梯度计算仍然正确吗

optimiser.zero_grad()
net.train()        
_,forecast = net(torch.tensor(feature, dtype=torch.float).to(DEVICE))
loss = F.l1_loss(torch.t(torch.mul(torch.t(forecast), 
                                           torch.tensor(weight,dtype=torch.float).to(DEVICE))) ,
                         torch.t(torch.mul(torch.t(torch.tensor(target,dtype=torch.float).to(DEVICE)), 
                                           torch.tensor(weight,dtype=torch.float).to(DEVICE))),reduction='mean')
loss.backward()
params.append(net.parameters())
optimiser.step()

是的,它是正确的

如果未使用在位操作,将正确计算渐变。此外,在Pytorch的当前版本中,如果您在程序中意外地涉及一些就地操作,则会报告一个错误


这里有一个相关的例子。您可以在这里找到更多信息。

是的,它是正确的

如果未使用在位操作,将正确计算渐变。此外,在Pytorch的当前版本中,如果您在程序中意外地涉及一些就地操作,则会报告一个错误

这里有一个相关的例子。你可以在这里找到更多信息