import torch
#print('1.自动梯度计算')
x = torch.arange(4.0, requires_grad=True) # 1.将梯度附加到想要对其计算偏导数的变量
#print('x:', x)
#print('x.grad:', x.grad) # 打印tensor的梯度(目前是None,因为没有记录任何计算)
y = 2 * torch.dot(x, x) # 2.记录目标值的计算 定义一个新的张量 y,它是 x 的点积的平方乘以2
#print('y:', y)
y.backward() # 3.执行它的反向传播函数 求导
#print('x.grad:', x.grad) # 4.访问得到的梯度 导数
#print('x.grad == 4*x:', x.grad == 4 * x) #验证
## 计算另一个函数
x.grad.zero_() #zero_ 将张量 x 的梯度清零
y = x.sum()
#print('y:', y)
y.backward() # 执行反向传播,计算 y 相对于 x 的梯度
#print('x.grad:', x.grad) # 打印 x 的梯度
# 非标量变量的反向传播
x.grad.zero_()
#print('x:', x)
y = x * x
#print('y:', y)
y.sum().backward() # 执行反向传播,计算 y 的总和相对于 x 的梯度
#print('x.grad:', x.grad)
def f(a):
b = a * 2
print(b.norm())
while b.norm() < 1000: # 求L2范数:元素平方和的平方根
b = b * 2
if b.sum() > 0:
c = b
else:
c = 100 * b
return c
print('2.Python控制流的梯度计算')
a = torch.tensor(2.0) # 初始化变量
a.requires_grad_(True) # 1.将梯度赋给想要对其求偏导数的变量 创建一个张量 a,并启用梯度追踪
print('a:', a)
d = f(a) # 2.记录目标函数
print('d:', d)
d.backward() # 3.执行目标函数的反向传播函数
print('a.grad:', a.grad) # 4.获取梯度
李沐动手学深度学习pytorch版 pycharm代码实现
最新推荐文章于 2024-06-12 23:52:02 发布