pytorch 官方教學筆記(二 自動梯度)

2021-10-02 13:35:31 字數 2619 閱讀 5268

autograd包是所有神經網路的核心,接下來我們先對其進行簡單地訪問,然後訓練我們的第乙個神經網路

autograd包可以自動區分出張量上的所有操作,這意味著backprop是由**的執行方式定義的,並且每次迭代都可以不同·

torch.tensor是包的核心類。如果將它的屬性.requires_grad設定為true,它將跟蹤對其所有的操作。完成計算後,可以呼叫.backward()會自動計算出所有梯度。該張量的梯度將累加到.grad屬性中

如果要停止張量跟蹤歷史記錄,可以呼叫.detach()將其從計算歷史記錄中分離出來,並防止跟蹤接下來的計算。

為了防止跟蹤歷史記錄(與降低記憶體占用),還可以將**寫在with torch.no_grad():中,這在評估模型時特別有用,因為模型可能具有可訓練的引數with require_grad = true,我們不需要計算梯度。

tensor和function相互連線並建立乙個無環圖,該圖會對計算歷史進行編碼。每乙個張量都對應乙個.grad_fn屬性,改屬性引用function已建立的tensor(除了使用者建立的tensor.grad_fnnone))

如果想要計算導數,可以呼叫tensor上的.backward()方法,如果tensor是乙個標量,則就無須指定backward()的引數,但是如果具有更多元素的話,則需要指定gradient引數,這個gradient引數是乙個匹配形狀的張量

import torch
x = torch.ones(2,

2,requires_grad=

true

)x

tensor([[1., 1.],

[1., 1.]], requires_grad=true)

y = x +

2y

tensor([[3., 3.],

[3., 3.]], grad_fn=)

y.grad_fn
z = y*y*

3out = z.mean(

)print

(z, out)

tensor([[27., 27.],

[27., 27.]], grad_fn=) tensor(27., grad_fn=)

a = torch.randn(2,

2)a =(

(a *3)

/(a -1)

)print

(a.requires_grad)

a.requires_grad_(

true

)print

(a.requires_grad)

b =(a * a)

.sum()

print

(b.grad_fn)

false

true

現在進行反向傳播

out.backward(

)

x.grad
tensor([[4.5000, 4.5000],

[4.5000, 4.5000]])

y.backward(x)
x
tensor([[1., 1.],

[1., 1.]], requires_grad=true)

print

(x.requires_grad)

print

((x **2)

.requires_grad)

with torch.no_grad():

print

((x **2)

.requires_grad)

true

true

false

print

(x.requires_grad)

y = x.detach(

)print

(y.requires_grad)

print

(x.eq(y)

.all()

)

true

false

tensor(true)

Pytorch官方指南(二) 翻譯版本

torch.cuda用於設定和執行cuda操作。它跟蹤當前選定的gpu,預設情況下,您分配的所有cuda tensor都將在該裝置上建立。無論怎麼樣,一旦分配了乙個張量,就可以對它進行操作,而不必考慮所選的裝置,結果將始終與張量放在同乙個裝置上。預設情況下不允許跨gpu操作,除了copy u 和其他...

pytorch學習筆記(二) gradient

在bp的時候,pytorch是將variable的梯度放在variable物件中的,我們隨時都可以使用variable.grad得到對應variable的grad。剛建立variable的時候,它的grad屬性是初始化為0.0的。import torch from torch.autograd im...

PyTorch學習筆記(二) 變數

在 torch 中,variable 是乙個存放會變化的值 變數 的地理位置。可以理解為乙個容器,裡面的值會不停的變化,就像乙個裝雞蛋的籃子,雞蛋數會不停變動。那誰是裡面的雞蛋呢,自然就是 torch 的 tensor 如果用乙個 variable 進行計算,那返回的也是乙個同型別的 variabl...