我有以下代码:
A = Tensor of [186,3]
如果我按如下所示创建一个新的空张量:
tempTens = torch.tensor(np.zeros((186,3)), requires_grad = True).cuda()
然后我对A块进行一些操作,并将其输出到tempTens中,我将其完全用于进一步的计算,像这样说:
tempTens[20,:] = SomeMatrix * A[20,:]
实际上梯度会正确传递吗,可以说我有一个成本函数,可以优化tempTens的输出以得到一些地面真相
答案 0 :(得分:0)
在这种情况下,tempTens[20,:] = SomeMatrix * A[20,:]
是针对tempTens
的就地操作,通常不能保证它可以与autograd一起使用。但是,如果您通过应用类似concatenation
output = torch.cat([SomeMatrix * A[20, :], torch.zeros(163, 3, device='cuda')], dim=0)
在数学方面(从SomeMatrix * A[20, :]
开始的前20行和后面的166行的0组成的矩阵)将获得相同的结果,但这在autograd上可以正常使用。一般来说,这是解决此类问题的正确方法。