Python Pytorch深度學習之自動微分

2022-09-24 23:15:09 字數 2119 閱讀 4243

目錄

antograd包是pytorch中所有神經網路的核心。autograd為tensor上的所有操作提供自動微分,它是乙個由執行定義的框架,這意味著以**執行方式定義後向傳播,並且每一次迭代都可能不同

torch.tensor是包的核心。

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

2.完成計算之後,可以呼叫backward()來自帶計算多有梯度。該張量的梯度將積累到.grad屬性中。

3.要停止tensor歷史記錄的跟蹤,可以呼叫.detach(),他將與計算歷史記錄分離,並防止將來的計算被跟蹤

4.要停止跟蹤歷史記錄(和使用記憶體),可以將**塊使用with torch.no_grad():包裝起來。在評估模型時候,很有用,因為模型在訓練階段具有requires_grad=true的可訓練引數有利於調參,但是在評估階段不需要梯度

5.還有乙個對於autograd實現非常重要的就是function。tensor和function互相連線並構建乙個肺迴圈圖,他儲存整個完整的計算過程的歷史資訊。每個張量都有乙個.grad_fn屬性儲存著建立了張量的function的引用(如果使用者自己建立的張量,那麼grad_fn是none)

6.如果想計算導數,可以呼叫tensor.backward().如果tensor是標量(包含乙個元素資料)則不需要指定任何引數backward(),但是如果他有更多元素,則需要指定gradient引數來指定張量的形狀

import torch

# 建立乙個張量,設定requires_grad=true

x=torch.ones(2,2,requires_grad=true)

print(x)

# 針對張量操作

y=x+2

print(y)

print(y.grad_f程式設計客棧n)#y作為操作的結果被建立,所以他有grad_fn

# 對y操作

z=y*y*3

out=z.mean()

print(z,out)

執行結果

# 如果在變數輸入過程中沒有提供相應引數,輸入的標記預設為false,requires_grad_()會改變張量的requires_grad標記

a=torch.randn(2, 2)

a=((a*3)/(a-1))

# 前面沒有設定requires_grad,固會輸出false

print(a.requires_grad)

a.requires_grad_(true)

# 經過上面語句的更改之後,此處應該輸出true

print(a.requires_grad)

b=(a*a).sum()

# 輸出梯度資訊

print(b.grad_fn)

執行結果

現在向後傳播,因為輸出包含了乙個標量,out,backward()等同於out.backward(torch.tensor(1,))

out.backward()#向後傳播

print(x.grad)#列印梯度

執行結果

原理# 雅克比向量積

x=torch.randn(3,requires_grad=true)

y=x*2

print(y)

while y.data.norm()<1000:

y=y*2

print(y)#此時y不是標量,torch.autograd 不能夠直接計算整個雅可比,但是如果我們只想要雅可比向量積,只需要簡單的傳遞向量給 backward 作為引數

v=torch.tensor([0.1,1.0,0.0001],dtype=torch.float)

y.backward(v)

print(x.g程式設計客棧rad)

print(x.requires_grad)

print((x**2).requires_grad)

# 使用一下語句停止從跟蹤歷史中.require_gra=true的張量自動求導

with torch.no_grad():

print((x**2).requires_grad)

執行結果

本文標題: python pytorch深度學習之自動微分

本文位址: /jiaoben/python/433224.html

簡述python pytorch 隨機種子的實現

隨機數廣泛應用在科學研究,但是計算機無法產生真正的隨機數,一般成為偽隨機數.它的產生過程 給定乙個隨機種子 乙個正整數 根據隨機演算法和種子產生隨機序列.給定相同程式設計客棧的隨機種子,計算機產生的隨機數列是一樣的 這也許是偽隨機的原因 隨機種子是什麼?隨機種子是針對隨機方法而言的。隨機方法 常見的...

什麼是OpenGL中的深度 深度快取 深度測試?

1 直觀理解 深度其實就是該象素點在3d世界中距離攝象機的距離,深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度測試決定了是否繪製較遠的象素點 或較近的象素點 通常選用較近的,而較遠優先能實現透視的效果!2 z值 深度值 z buffer 深度快取 下面先講講z座標。z座標和x y座標一樣...

什麼是OpenGL中的深度 深度快取 深度測試?

1 直觀理解 深度其實就是該象素點在3d世界中距離攝象機的距離,深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度測試決定了是否繪製較遠的象素點 或較近的象素點 通常選用較近的,而較遠優先能實現透視的效果!2 z值 深度值 z buffer 深度快取 下面先講講z座標。z座標和x y座標一樣...