class torch.Tenosr が持つ .backward() メソッドを使う事で微分を行なってくれます。
import torch
x = torch.tensor(5.0, requires_grad=True)
y = x ** 2 # <- y = x^2
y.backward() # 微分
print("dy/dx = ", x.grad.numpy())
二階微分だって出来ます。
x = torch.tensor(5.0, requires_grad=True)
y = x ** 2 # <- y = x^2
z = torch.autograd.grad(y, x, create_graph=True) # <- z = 2
xprint("dy/dx = ", z[0].detach().numpy())
z[0].backward()print("dz/dx = ", x.grad.numpy()) # <- dz/dx = 2
当然、偏微分だって出来ます。
z=x2y+3xy5+x3∂x∂z=2xy+3y5+3x2∂y∂z=x2+15xy4
x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(1.0, requires_grad=True)
z = x**2 * y + 3*x*y**5 + x ** 3
z.backward()print("dz/dx = {}".format(x.grad))
print("dz/dy = {}".format(y.grad))