本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。
Part1:PyTorch簡單知識
Part2:PyTorch的自動梯度計算
Part3:使用PyTorch構建一個神經網絡
Part4:訓練一個神經網絡分類器
Part5:數據并行化
本文是關于Part2的內容。
Part2:PyTorch的自動梯度計算
autograd package是PyTorch中所有神經網絡的核心。先了解一些基本知識,然后開始訓練第一個神經網絡。autograd package提供了Tensors上所有運算的自動求導功能。它是一個按運行定義(define-by-run)的框架,這意味著反向傳播是依據代碼運行情況而定義的,并且每一個單次迭代都可能不相同。
1 變量(Variable)
autograd.Variable 是這個package的中心類。它打包了一個Tensor,并且支持幾乎所有運算。一旦你完成了你的計算,可以調用.backward(),所有梯度就可以自動計算。
你可以使用.data屬性來訪問原始tensor。相對于變量的梯度值可以被積累到.grad中。
這里還有一個類對于自動梯度的執行是很重要的:Function(函數)
變量和函數是相互關聯的,并且建立一個非循環圖。每一個變量有一個.grad_fn屬性,它可以引用一個創建了變量的函數(除了那些用戶創建的變量——他們的grad_fn是空的)。
如果想要計算導數,可以調用Variable上的.backward()。如果變量是標量(只有一個元素),你不需要為backward()確定任何參數。但是,如果它有多個元素,你需要確定grad_output參數(這是一個具有匹配形狀的tensor)。
import torch from torch.autograd import Variable
創建一個變量:
x = Variable(torch.ones(2, 2), requires_grad=True) print(x)
對變量做一個運算:
y = x + 2 print(y)
y作為一個運算的結果被創建,所以它有grad_fn。
print(y.grad_fn)
在y上做更多的運算:
z = y * y * 3 out = z.mean() print(z, out)
2 梯度(Gradients)
現在來做反向傳播。out.backward()等價于out.backward(torch.Tensor([1.0]))。
out.backward()
打印梯度 d(out)/dx
print(x.grad)
你應該會得到一個元素為4.5的矩陣。
你可以使用autograd做很多瘋狂的事情。
x = torch.randn(3) x = Variable(x, requires_grad=True) y = x * 2 while y.data.norm() < 1000: y = y * 2 print(y)
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)
責任編輯:xj
-
神經網絡
+關注
關注
42文章
4838瀏覽量
107750 -
深度學習
+關注
關注
73文章
5598瀏覽量
124396 -
pytorch
+關注
關注
2文章
813瀏覽量
14842
發布評論請先 登錄
Pytorch 與 Visionfive2 兼容嗎?
機器學習和深度學習中需避免的 7 個常見錯誤與局限性
【團購】獨家全套珍藏!龍哥LabVIEW視覺深度學習實戰課(11大系列課程,共5000+分鐘)
【團購】獨家全套珍藏!龍哥LabVIEW視覺深度學習實戰課程(11大系列課程,共5000+分鐘)
如何在機器視覺中部署深度學習神經網絡
摩爾線程發布Torch-MUSA v2.1.1版本
自動駕駛中Transformer大模型會取代深度學習嗎?
Arm方案 基于Arm架構的邊緣側設備(樹莓派或 NVIDIA Jetson Nano)上部署PyTorch模型
Nordic收購 Neuton.AI 關于產品技術的分析
摩爾線程發布Torch-MUSA v2.0.0版本 支持原生FP8和PyTorch 2.5.0
海思SS626開發板
《RK3588核心板:AIoT邊緣計算的革命性引擎,能否解鎖智能物聯新范式?》
有獎直播 | @4/8 輕松部署,強大擴展邊緣運算 AI 新世代
邊緣AI新突破:MemryX AI加速卡與RK3588打造高效多路物體檢測方案
基于PyTorch的深度學習入門教程之PyTorch的自動梯度計算
評論