如何解决pytorch 需要 grad 根据掩码
我计算一组vertors之间的距离矩阵,并反向计算计算矩阵和另一个矩阵之间的mse损失。但似乎 vectors
上的后向梯度都是 nan,因为对角元素中二次根的导数的分母是 0。
import torch
import torch.nn as nn
from einops import rearrange
loss_f = nn.MSELoss()
vectors = torch.randn(1,10,3,requires_grad=True) # 10 vertors with 3 elements
pred_dist = torch.pow(rearrange(vectors,'b n d -> b n () d') - rearrange(vectors,'b n d -> b () n d'),2).sum(axis=-1)**.5
real_dist = torch.randn(1,10)
loss = loss_f(pred_dist,real_dist)
loss.backward()
print(vectors.grad)
"""
out:
tensor([[[nan,nan,nan],[nan,nan]]])
"""
是否有一种基于掩码的方法只在非诊断元素上要求梯度?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。