pytorch學習3 自動微分

2021-10-08 11:01:10 字數 1982 閱讀 8336

建立乙個張量,設定 requires_grad=true 來跟蹤與它相關的計算

如果將其屬性 .requires_grad 設定為 true,則會開始跟蹤針對 tensor 的所有操作。

import torch

#建立乙個張量,設定 requires_grad=true 來跟蹤與它相關的計算

#如果將其屬性 .requires_grad 設定為 true,則會開始跟蹤針對 tensor 的所有操作。

x = torch.ones(2,

2, requires_grad=

true

)print

(x)# 對張量做乙個操作

y = x +

2print

(y)# y 作為操作的結果被建立,所以它有 grad_fn

# 每個張量都有乙個 .grad_fn 屬性儲存著建立了張量的 function 的引用

print

(y.grad_fn)

# output:

z = y * y *

3out = z.mean(

)print

(z, out)

# output:tensor([[27., 27.],[27

.,27.

]], grad_fn=

) tensor(27.

, grad_fn=

)

如果使用者自己建立張量,grad_fn為none

a = torch.randn(2,

2)a =(

(a *3)

/(a -1)

)# 通過requires_grad_()會改變張量的 requires_grad標記。輸入的標記預設為 false

print

(a.requires_grad)

a.requires_grad_(

true

)print

(a.requires_grad)

b =(a * a)

.sum()

print

(b.grad_fn)

# output:

false

true

>

#我們現在後向傳播,因為輸出包含了乙個標量,out.backward()等同於out.backward(torch.tensor(1.)),如果你想計算導數,你可以呼叫tensor.backward()。如果 tensor 是標量,則不需要指定任何引數backward(),但是如果它有更多元素,則需要指定乙個gradient 引數來指定張量的形狀。

# 梯度反向傳播

out.backward(

)

梯度為4.5,是out對x求偏導的出的結果

print

(x.grad)

tensor([[

4.5000

,4.5000],

[4.5000

,4.5000]]

)

可以通過將**包裹在 with torch.no_grad(),來停止對從跟蹤歷史中的 .requires_grad=true 的張量自動求導。要停止跟蹤歷史記錄(和使用記憶體),還可以將**塊使用 with torch.no_grad(): 包裝起來。在評估模型時,這是特別有用,因為模型在訓練階段具有 requires_grad = true 的可訓練引數有利於調參,但在評估階段我們不需要梯度。

print

(x.requires_grad)

print

((x **2)

.requires_grad)

with torch.no_grad():

print

((x **2)

.requires_grad)

output:

true

true

false

PyTorch 2 Autograd 自動微分

原文出自 在pytorch的所有神經網路中,核心是 autograd 包。讓我們先簡單介紹一下,然後我們將開始訓練我們的第乙個神經網路。autograd package 為張量上的所有操作提供自動微分 automatic differentiation 它是乙個按執行定義的框架 define by ...

Autograd 自動微分

1 深度學習的演算法本質上是通過反向傳播求導數,pytorch的autograd模組實現了此功能 在tensor上的所有操作,autograd都能為他們自動提供微分,避免手動計算導數的複雜過程。2 autograd.variable是autograd中的核心類,它簡單的封裝了tensor,並支援幾乎...

自動微分方法簡介

假設我們定義了乙個方程 f x,y x2y y 2 f x y x2y y 2,我們需要對 x x 和 y role presentation style position relative y y求偏導,此時通常由以下幾種做法 拿起紙筆應用鏈式法則逐層求導即可。缺點是易於出錯。下圖是符號微分方法在...