1.求导
params = torch.tensor([1.0, 0.0], requires_grad=True)
注意到了张量构造函数的 require_grad = True 吗?这个参数告诉PyTorch需要追踪在 params 上进行运算而产生的所有张量。换句话说,任何以 params 为祖先的张量都可以访问从 params 到该张量所调用的函数链。如果这些函数是可微的(大多数PyTorch张量运算都是可微的),则导数的值将自动存储在参数张量的 grad 属性中。
你可以将包含任意数量的张量的 require_grad 设置为 True 以及组合任何函数。在这种情况下,
PyTorch会在沿着整个函数链(即计算图)计算损失的导数,并在这些张量(即计算图的叶节点)的grad 属性中将这些导数值累积(accumulate)起来
警告:PyTorch的新手(以及很多经验丰富的人)经常忽视的事情:是积累(accumulate)而不是存储(store)。
为防止这种情况发生,你需要在每次迭代时将梯度显式清零。可以使用就地方法 zero_ 轻松地做到这一点:
if params.grad is not None:
params.grad.zero_()# 这可以在调用backward之前在循环中的任何时候完成
如果不使用 params.grad.zero_()会出现梯度累积的效果
&nb