pytorch自动求导

本文详细介绍了如何在PyTorch中使用张量追踪求导,包括grad参数的追踪、梯度累积与清零,以及如何运用SGD优化器进行参数更新。涵盖了设置损失函数、使用梯度下降法和实例化优化器的步骤,适合初学者理解张量计算图和自动微分原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种豆得瓜er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值