Pytorch-创建新变量时是否会转移渐变?

时间:2019-01-31 22:05:48

标签: python pytorch

我有以下代码:

A = Tensor of [186,3]

如果我按如下所示创建一个新的空张量:

tempTens = torch.tensor(np.zeros((186,3)), requires_grad = True).cuda()

然后我对A块进行一些操作,并将其输出到tempTens中,我将其完全用于进一步的计算,像这样说:

tempTens[20,:] = SomeMatrix * A[20,:] 

实际上梯度会正确传递吗,可以说我有一个成本函数,可以优化tempTens的输出以得到一些地面真相

1 个答案:

答案 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上可以正常使用。一般来说,这是解决此类问题的正确方法。

相关问题