一些基本名词不做解释了,主要记录一下求导(pytorch实现)
x = torch.arange(4, dtype = torch.float32)
x.requires_grad_(True)
y = 2 * torch.dot(x, x)
y.backward()
x.grad
Result
tensor([ 0., 4., 8., 12.])
解释:
x.requires_grad_(True):使得x可以被求导,要对x求导必须有这句
y.backward()指的是哪个函数对x求导,下面举个例子
x = torch.arange(4, dtype = torch.float32)
x.requires_grad_(True)
y = x.sum()
z = y ** 2
m = z + 1
t = m * 2
进行求导
Eg1
t.backward()
x.grad
Result
tensor([24., 24., 24., 24.])
Eg2
z.backward()
x.grad
Result
tensor([12., 12., 12., 12.])
因为,dy/dx = 1, dz / dy = 2 * y = 12, dm / dz = 1, dt / dm = 2
t对x求导等于([24., 24., 24., 24.])
z对x求导等于([12., 12., 12., 12.])
标量y对向量x的每个元素求导,然后将各个求导结果按向量x的形状排列。