pytorc求導問題

2021-09-19 20:45:22 字數 2835 閱讀 9473

矩陣求導大致可以分為三大類,標量(分子)求導、向量(分子)求導、矩陣(分子)求導。pytorch中均有所實現。用法:backward+grad

x = torch.randn(10, 5, requires_grad = true)

w = torch.randn(5, 6, requires_grad = true)

y = (x.mm(w)).sum()

y.backward()

x.grad

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

print(x)

print(x.data)

print(x.grad_fn)

tensor([[ 0.6669,  0.4549, -0.8281],

[ 1.4578, 0.6001, -1.4019]], requires_grad=true)

tensor([[ 0.6669, 0.4549, -0.8281],

[ 1.4578, 0.6001, -1.4019]])

none

grad_fn是什麼呢?意思就是這個tensor是不是由其他tensor構成的函式(由兩個以上tensor經過運算得到,但x+1得到的tensor並不是,因為1不是tensor)。從下面的例子可以更清楚的看到:

此外,參考下例,w不會求導,因為w的grad_fn不為none。

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

y = torch.randn(2, 3, requires_grad = true)

w = x + y

print('w.requires_grad:', w.requires_grad)

z = torch.randn(2, 3, requires_grad = true)

out = (w + z).sum()

out.backward()

print('w.grad:', w.grad)

print('x.grad:', x.grad)

print('y.grad:', y.grad)

print('z.grad:', z.grad)

w.requires_grad: true

w.grad: none

x.grad: tensor([[1., 1., 1.],

[1., 1., 1.]])

y.grad: tensor([[1., 1., 1.],

[1., 1., 1.]])

z.grad: tensor([[1., 1., 1.],

[1., 1., 1.]])

綜上所述:標量求導和第一章開頭的**一樣,使用backward(),然後求grad

x = torch.randn(10, 5, requires_grad = true)

w = torch.randn(5, 6, requires_grad = true)

y = (x.mm(w)).sum()

y.backward()

x.grad

向量求導和標量求導相似,也是使用backward,只是此時backward()函式中需要設定乙個引數gradient,具體為與要backward的tensor shape一樣。如下所示:

x = torch.randn(5, 1, requires_grad = true)

w = torch.randn(5, 1, requires_grad = true)

y = x + w

y.backward(gradient = torch.ones_like(y))

x.grad

anaconda虛擬環境配置pytorch框架

成功安裝anaconda後,我們可以新建虛擬環境,從而使得各個環境之間互不影響,方便使用。1.建立pytorch的虛擬環境 conda create n pytorch python 3.6使用activate啟用該環境 source activate pytorch啟用後,會看到前面會顯示環境名字...

ubuntu18 04離線安裝pytorch

然後切換到相應目錄,分別安裝即可 sudo pip install torch 1.4.0 cp36 cp36m linux x86 64.whl sudo pip install torchvision 0.5.0 cp36 cp36m linux x86 64.whl安裝完成後新建終端驗證 py...

L1正則化求導問題

在實現機器學習演算法時,最常用的是l2正則化,因為l2正則化有連續可微的性質,易求導。但l1能產生稀疏解,而且稀疏解的泛化能力會比較好,不過由於l1正則化並不是處處連續的,所以優化的時候會有一定難度。對於目標函式不是連續可微的情況,可以用次梯度來進行優化,但次梯度存在兩個問題 次梯度定義 次梯度,次...