I have a question regarding narrowing tensors when using autograd
.
If I have a variable x1
obtained by narrowing another variable x
, the backward phase seems to correctly compute the gradients for x
, but x1.grad
is zero. Is this an expeced behaviour?
import torch
from torch.autograd import Variable
x = Variable(torch.linspace(1, 12, 12).view(3, 4), requires_grad=True)
x1 = x[:,:2] # x1 is 3 x 2
x2 = x[:,1:] # x2 is 3 x 3
y1 = 2 * x1
y2 = 3 * x2
y1.backward(torch.ones(3, 2))
y2.backward(torch.ones(3, 3))
print(x.grad) # This is correct
# Variable containing:
# 2 5 3 3
# 2 5 3 3
# 2 5 3 3
# [torch.FloatTensor of size 3x4]
print(x1.grad) # This is zero
# Variable containing:
# 0 0
# 0 0
# 0 0
# [torch.FloatTensor of size 3x2]