PyTorch autograd模块:自动微分详解

需积分: 0 0 下载量 110 浏览量 更新于2024-08-05 收藏 440KB PDF 举报
"PyTorch autograd模块介绍及基本操作" PyTorch的autograd模块是其核心特性之一,主要用于自动计算神经网络中的梯度,从而实现深度学习模型的训练。autograd采用`define-by-run`的方式,这意味着每次运行代码时都会动态地构建计算图,允许在每次迭代中进行不同的计算,这与静态计算图框架如TensorFlow有所不同。 1. **追踪计算历史** 当创建一个Tensor并设置`requires_grad=True`时,PyTorch会开始追踪在这个变量上的所有操作。例如: ```python x = torch.ones(2, 2, requires_grad=True) ``` `x`现在将记录所有在其上执行的操作。 2. **计算梯度** 完成计算后,可以通过`.backward()`方法计算梯度。如果`x`是一个标量,可以直接调用`.backward()`;如果它有多个元素,需要提供一个与之形状匹配的`gradient`参数。例如: ```python y = x + 2 y.sum().backward() ``` 这将计算`x`相对于`y`的梯度,并将其存储在`x.grad`中。 3. **分离计算历史** 使用`.detach()`方法可以断开一个Tensor与其计算历史的连接,使其不再追踪梯度。这在不需要进一步计算梯度时很有用,例如在模型预测阶段: ```python z = x.detach() ``` 4. **阻止梯度追踪** 如果希望在一段代码中暂时不追踪梯度,可以使用`torch.no_grad()`上下文管理器: ```python with torch.no_grad(): # 在这段代码中,任何操作都不会追踪梯度 ``` 5. **计算图与Function对象** 每个Tensor都有一个`grad_fn`属性,它引用了创建这个Tensor的`Function`对象。这构成了一个非循环图,记录了完整的计算历史。例如: ```python print(y.grad_fn) ``` 如果`Tensor`是通过用户直接创建的,`grad_fn`将为`None`。 6. **改变`requires_grad`状态** 可以在Tensor已经创建后改变`requires_grad`属性,比如: ```python w = x.clone().detach() # 克隆并断开历史 w.requires_grad_(True) # 现在w追踪梯度 ``` PyTorch的autograd模块使得构建和训练深度学习模型变得简单而灵活。通过追踪计算历史、自动计算梯度以及控制梯度追踪,用户可以专注于模型的设计和优化,而无需手动处理复杂的梯度计算。