PyTorch 自動差分包-Torch.Autograd

2025-06-25 14:09 更新

一、自動差分基礎

torch.autogradPyTorch 中實現(xiàn)自動分化的模塊,它能幫助我們自動計算張量的梯度。使用時,只需將張量聲明為 requires_grad=True 即可。

(一)聲明張量以計算梯度

可以通過 requires_grad=True 創(chuàng)建一個張量,以便 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 函數(shù)

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None) 函數(shù)用于計算給定張量的梯度總和 w.r.t. 圖葉。

(二)grad 函數(shù)

torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False) 函數(shù)用于計算并返回輸出 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_ 方法

從創(chuàng)建它的圖形中分離張量,使其成為一片葉子。

(七)register_hook 方法

注冊一個倒鉤。

(八)retain_grad 方法

為非葉張量啟用.grad 屬性。

五、實際案例

假設我們在 W3Cschool 平臺開發(fā)一個簡單的深度學習模型,用于預測用戶行為。我們需要處理用戶數(shù)據(jù),包括將數(shù)據(jù)轉換為適合模型輸入的張量格式,并計算梯度。以下是具體的代碼示例:

import torch
import numpy as np


## 假設我們有用戶行為數(shù)據(jù)
user_data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32)


## 將 NumPy 數(shù)組轉換為 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 的數(shù)據(jù)庫或文件系統(tǒng)中
## 例如:save_gradient_to_w3cschool_database(tensor_data.grad)

在這個案例中,我們首先將用戶行為數(shù)據(jù)從 NumPy 數(shù)組轉換為 PyTorch 張量,并啟用梯度計算(requires_grad=True)。然后,我們將張量移動到 GPU(如果可用)。接著,我們進行前向傳播計算輸出,并進行反向傳播計算梯度。最后,我們將梯度結果保存到 W3Cschool 平臺的數(shù)據(jù)庫或文件系統(tǒng)中。

六、總結

torch.autograd 提供了強大的自動分化功能,可以方便地計算張量的梯度。通過理解 backward、grad、no_grad 等關鍵概念和方法,可以更好地進行深度學習模型的訓練和優(yōu)化。無論是在編程獅平臺學習深度學習,還是在 W3Cschool 上探索其他編程知識,掌握自動分化的概念都是非常重要的。

標簽:PyTorch, 自動差分, 深度學習, 零基礎, 編程獅, W3Cschool, 梯度計算, 深度學習教程, 編程獅教程, W3Cschool教程

標題:PyTorch 教程:零基礎入門自動差分包-Torch.Autograd - 編程獅

描述:本教程為零基礎的初學者詳細講解 PyTorch 中的自動差分包-Torch.Autograd,包括梯度計算、上下文管理器的使用以及實際應用案例。通過在編程獅平臺(W3Cschool)上的示例,幫助讀者輕松入門深度學習,開啟編程學習之旅。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號