PyTorch自动微分

import torch
自动微分
# 对函数\(y=2x^tx\)求梯度,x为列向量
x = torch.arange(4.0)
# 寻找存储梯度的内存
x.requires_grad_(True)
print(x.grad)
y = 2 * torch.dot(x, x)
print(y)
# 调用反向传播函数backward()
y.backward()
print(x.grad)
# 验证
print(x.grad == 4 * x)
# 再计算另一个函数:y=x.sum()
# 需要先清除之前的值
x.grad.zero_()
y = x.sum()
y.backward()
print(x.grad)

分离计算
# 设y=y(x),z=z(x,y). z对x求偏导会受到y的影响
# 在一些情况下,我们希望将y视为常数,再求z对x的偏导,需要用到分离函数detach()
x.grad.zero_()
y = x * x
u = y.detach()
z = u * x
z.sum().backward()
print(x.grad)

    所属分类:Python     发表于2022-01-30