目錄
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座標一樣...