Pytorch自动求导
时间: 2025-05-07 13:32:54 浏览: 29
### PyTorch 自动求导机制
#### 计算图构建与自动求导原理
在PyTorch中,`autograd`包提供了对张量上所有操作的自动求导支持[^1]。每当执行涉及可微分的操作时,这些操作会被动态地加入到计算图中,并且每个参与运算的Tensor都会更新其`grad_fn`属性来指向创建它的函数对象[^3]。
对于具体的实现方式,在定义模型参数时可以通过设置`requires_grad=True`使得该变量成为叶子节点并开启梯度追踪功能;当完成一次前向传播过程后,通过调用`.backward()`可以触发整个网络从输出端往回逐层计算各个权重对应的偏导数值即梯度信息[^4]。
需要注意的是,默认情况下只有标量可以直接调用`y.backward()`来进行反向传播以获取损失相对于各参数的变化率。如果是非标量,则需指定关于哪个维度求和作为最终的目标值用于传递给`backward()`方法内的`gradient`参数[^2]。
#### 使用示例
下面展示了一个简单的线性回归案例,其中包含了如何利用PyTorch内置工具完成数据准备、建立简单神经元连接关系以及训练循环内迭代优化的过程:
```python
import torch
# 定义输入特征x (batch_size=1, feature_num=5),目标标签y(batch_size=1,label_num=3)
x = torch.tensor([1., 1., 1., 1., 1.])
y = torch.tensor([0., 0., 0.])
# 初始化权重w(5*3) 和 偏置项b(3), 同时声明它们需要跟踪梯度变化
w = torch.randn((5, 3), dtype=torch.float, requires_grad=True)
b = torch.randn((3,), dtype=torch.float, requires_grad=True)
# 执行前向传播得到预测结果z=x*w+b
z = torch.matmul(x, w) + b
# 应用二分类交叉熵损失函数评估当前状态下的误差程度
loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y)
# 反向传播计算梯度
loss.backward()
print(w.grad) # 输出权重w的梯度
print(b.grad) # 输出偏置b的梯度
```
阅读全文
相关推荐
















