В документации Pytorch https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py На изображении я не могу понять, что означает y.backward(v) и почему нам нужно определить другой тензор v для выполнения обратной операции, а также как мы получили результаты x.grad Заранее спасибо
Функция Autograd в документации Pytorch
Ответы (1)
y.backward()
вычисляет dy/dz, где z
— все конечные узлы графа вычислений. И он хранит dy/dz
в z.grad
.
Например: в приведенном выше случае конечные узлы равны x.
y.backward()
работает, когда y
является скаляром, что характерно для большей части глубокого обучения. Когда y
является вектором, вы должны передать другой вектор (v
в приведенном выше случае). Вы можете видеть это как вычисление d(v^Ty)/dx
.
Чтобы ответить, как мы получили x.grad
, обратите внимание, что вы увеличиваете x
в степени 2, если только норма не превышает 1000
, поэтому x.grad
будет v*k*x**(k-1)
, где k
равно 2**i
, а i
- это количество раз, когда цикл был выполнен.
Чтобы иметь менее сложный пример, рассмотрите это:
x = torch.randn(3,requires_grad=True)
print(x)
Out: tensor([-0.0952, -0.4544, -0.7430], requires_grad=True)
y = x**2
v = torch.tensor([1.0,0.1,0.01])
y.backward(v)
print(x.grad)
Out[15]: tensor([-0.1903, -0.0909, -0.0149])
print(2*v*x)
Out: tensor([-0.1903, -0.0909, -0.0149], grad_fn=<MulBackward0>)
person
Umang Gupta
schedule
27.01.2020
Спасибо за помощь...
- person A_the_kunal; 27.01.2020