PyTorch 自动差分包-Torch.Autograd

2025-06-25 14:09 更新

一、自动差分基础

torch.autogradPyTorch 中实现自动分化的模块,它能帮助我们自动计算张量的梯度。使用时,只需将张量声明为 requires_grad=True 即可。

(一)声明张量以计算梯度

可以通过 requires_grad=True 创建一个张量,以便 torch.autograd 对其进行记录操作以进行自动微分:

x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True)
out = x.pow(2).sum()
out.backward()
print(x.grad)
## 输出:
## tensor([[ 2.0000, -2.0000],
##         [ 2.0000,  2.0000]])

二、梯度计算

(一)backward 函数

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None) 函数用于计算给定张量的梯度总和 w.r.t. 图叶。

(二)grad 函数

torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False) 函数用于计算并返回输出 w.r.t 的梯度总和。

三、局部禁用梯度计算

(一)no_grad 上下文管理器

torch.autograd.no_grad 是禁用梯度计算的上下文管理器。当确定不会调用 Tensor.backward() 时,禁用梯度计算对于推断很有用。

(二)enable_grad 上下文管理器

torch.autograd.enable_grad 是启用梯度计算的上下文管理器。如果已通过 no_gradset_grad_enabled 禁用了梯度计算,则启用梯度计算。

(三)set_grad_enabled 上下文管理器

torch.autograd.set_grad_enabled(mode) 是将渐变计算设置为开或关的上下文管理器。

四、张量自动分级功能

(一)grad 属性

此属性默认为 None,并在首次调用 backward() 计算 self 的梯度时成为张量。

(二)requires_grad 属性

如果需要为此张量计算梯度,则为 True,否则为 False

(三)is_leaf 属性

按照惯例,所有具有 requires_gradFalse 的张量将是叶张量。

(四)backward 方法

计算电流张量 w.r.t. 图叶。

(五)detach 方法

返回与当前图形分离的新 Tensor。

(六)detach_ 方法

从创建它的图形中分离张量,使其成为一片叶子。

(七)register_hook 方法

注册一个倒钩。

(八)retain_grad 方法

为非叶张量启用.grad 属性。

五、实际案例

假设我们在 W3Cschool 平台开发一个简单的深度学习模型,用于预测用户行为。我们需要处理用户数据,包括将数据转换为适合模型输入的张量格式,并计算梯度。以下是具体的代码示例:

import torch
import numpy as np


## 假设我们有用户行为数据
user_data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32)


## 将 NumPy 数组转换为 PyTorch 张量
tensor_data = torch.tensor(user_data, requires_grad=True)


## 将张量移动到 GPU(如果可用)
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
tensor_data = tensor_data.to(device)


## 前向传播
output = tensor_data.pow(2).sum()


## 反向传播计算梯度
output.backward()


## 获取梯度
print(tensor_data.grad)


## 在 W3Cschool 平台中保存结果
## 你可以将结果保存到 W3Cschool 的数据库或文件系统中
## 例如:save_gradient_to_w3cschool_database(tensor_data.grad)

在这个案例中,我们首先将用户行为数据从 NumPy 数组转换为 PyTorch 张量,并启用梯度计算(requires_grad=True)。然后,我们将张量移动到 GPU(如果可用)。接着,我们进行前向传播计算输出,并进行反向传播计算梯度。最后,我们将梯度结果保存到 W3Cschool 平台的数据库或文件系统中。

六、总结

torch.autograd 提供了强大的自动分化功能,可以方便地计算张量的梯度。通过理解 backwardgradno_grad 等关键概念和方法,可以更好地进行深度学习模型的训练和优化。无论是在编程狮平台学习深度学习,还是在 W3Cschool 上探索其他编程知识,掌握自动分化的概念都是非常重要的。

标签:PyTorch, 自动差分, 深度学习, 零基础, 编程狮, W3Cschool, 梯度计算, 深度学习教程, 编程狮教程, W3Cschool教程

标题:PyTorch 教程:零基础入门自动差分包-Torch.Autograd - 编程狮

描述:本教程为零基础的初学者详细讲解 PyTorch 中的自动差分包-Torch.Autograd,包括梯度计算、上下文管理器的使用以及实际应用案例。通过在编程狮平台(W3Cschool)上的示例,帮助读者轻松入门深度学习,开启编程学习之旅。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号