Pytorch自動求解梯度

2021-10-04 23:43:30 字數 1148 閱讀 2098

要理解pytorch求解梯度,首先需要理解pytorch當中的計算圖的概念,在計算圖當中每乙個variable都代表的乙個節點,每乙個節點就可以代表乙個神經元,我們只有將變數放入節點當中才可以對節點當中的變數求解梯度,假設我們有乙個矩陣:

1., 2., 3.

4., 5., 6.

我們將這個矩陣(二維張量)首先在pytorch當中初始化,並且將其放入計算圖當中的節點當中,在pytorch當中,乙個節點用variable來表示,因此可以編寫如下**:

import

torch

from torch.autograd import

variable

#我們建立的是乙個二維張量(即矩陣)而不是標量,因此會報錯

#在pytorch當中,僅允許標量對標量或者 標量對向量(或者張量)求解偏導數

x=variable(torch.tensor([[1., 2., 3.], [4., 5., 6.]]), requires_grad=true)

在節點當中,擁有requires_grad的引數,系統預設是false,也就是不能對其中的變數求解梯度,但是我們需要裡面變數的梯度,因此需要將整個引數命名為true。

最後我們寫出其他變數有關x的表示式:

y=2*x*x+2j=y.mean()

這樣就得到了j的值,這是乙個標量,因為mean表示的求解平均值,在pytorch當中只能夠標量對標量,或者標量對張量求解偏導數,否則就會報錯。

現在我們的計算圖模型就搭建完畢了,整個模型當中只有乙個節點,其他的表示相當於神經元當中的權重,以及j代表loss函式,我們呼叫pytorch當中的反向傳播函式backward(),對x關於j的梯度進行求解,**如下:

j.backward()

這樣梯度就求解完畢了,我們列印出x關於j的梯度的值,後面的引數x.grad表示求解出來的x的梯度大小:

print("

x的梯度是:

",x.grad)

輸出:

x的梯度是: 

tensor([[0.6667, 1.3333, 2.0000],

[2.6667, 3.3333, 4.0000]]

得解!

PyTorch學習筆記 自動求梯度

在深度學習中,我們經常需要對函式求梯度 gradient pytorch提供的autograd包能夠根據輸 和前向傳播過程自動構建計算圖,並執 反向傳播。本節將介紹如何使用autograd包來進 自動求梯度的有關操作。建立 個tensor並設定requires grad屬性為true x torch...

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

autograd包是所有神經網路的核心,接下來我們先對其進行簡單地訪問,然後訓練我們的第乙個神經網路 autograd包可以自動區分出張量上的所有操作,這意味著backprop是由 的執行方式定義的,並且每次迭代都可以不同 torch.tensor是包的核心類。如果將它的屬性.requires gr...

利用pytorch對二維資料進行求解梯度

今天我們利用pytorch對二維資料進行求導並輸出顯示,主要用到pytorch中的linear mseloss 等函式,具體的求導過程詳見下面 import torch create tensors of shape 10,3 and 10,2 x torch.randn 10,3 y torch....