1. 理解requires_grad与requires_grad_()的基础概念
在PyTorch的世界里,requires_grad和**requires_grad_()**这两个看似相似的名称,实际上代表了两种完全不同的梯度控制方式。我第一次接触这两个概念时也犯过迷糊,直到在实际项目中踩了几个坑才真正理解它们的区别。
简单来说,requires_grad是张量的一个属性,而requires_grad_()是一个方法。这就像是一个灯泡的亮度(属性)和调节亮度的开关(方法)之间的关系。默认情况下,当我们创建一个张量时,它的requires_grad属性是False,这意味着PyTorch不会为这个张量计算梯度。
import torch
# 创建一个不需要计算梯度的张量
x = torch.tensor([1.0, 2.0, 3.0])
print(x.requires_grad) # 输出: False
# 创建一个需要计算梯度的张量
y = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print(y.requires_grad) # 输出: True
而requires_grad_()方法则允许我们在张量创建后修改这个属性。这个方法的名字以下划线结尾,在PyTorch中这通常表示这是一个"原地操作"(in-place operation),也就是说它会直接修改原张量而不是返回一个新的张量。
# 创建后修改requires_grad属性
z = torch.tensor([1.0, 2.0, 3.0])
print(z.requires_grad) # 输出: False
z.requires_grad_(True) # 原地修改
print(z.requires_grad) # 输出: True
2. 动态计算图中的梯度追踪机制
PyTorch的自动微分系统(Autog


313

被折叠的 条评论
为什么被折叠?



