PyTorch入門

househou發表於2017-07-08
PyTorch是Facebook釋出的一款非常具有個性的深度學習框架,它和Tensorflow,Keras,Theano等其他深度學習框架都不同,它是動態計算圖模式,其應用模型支援在執行過程中根據執行引數動態改變,而其他幾種框架都是靜態計算圖模式,其模型在執行之前就已經確定。

理解pytorch,首先要理解求導的概念。 數學上求導簡單來說就是求取方程式相對於輸入引數的變化率,也就是加速度。這部分理論基礎參考高等數學的內容,上過大學的都學過,可能現在都忘了吧:) 求導的作用是用導數對神經網路的權重引數進行調整,注意這裡提到了權重引數的概念,這是神經網路的範疇定義了,關於神經網路的基礎知識本書不做介紹,讀者最好先了解有關神經網路的基本概念再讀此書。 Pytorch中為求導提供了專門的包,包名叫autograd。如果用autograd.Variable來定義引數,則Variable自動定義了兩個變數,data代表原始權重資料;而grad代表求導後的資料,也就是梯度。每次迭代過程就用這個grad對權重資料進行修正。

enter image description here

實踐:

import torch

from torch.autograd import Variable

x = Variable(torch.ones(2, 2), requires_grad=True)

print(x)

輸出: 1 1 1 1

[torch.FloatTensor of size 2x2]

y=x+2

print(y)

輸出:

3 3 3 3

[torch.FloatTensor of size 2x2]

z = y * y * 3

out = z.mean()

print(z, out)

輸出:

(Variable containing:

27 27 27 27

[torch.FloatTensor of size 2x2]

, Variable containing:

27

[torch.FloatTensor of size 1]

[torch.FloatTensor of size 1]

out.backward()

輸出out對x的求導:

print(x.grad)

輸出結果:

Variable containing:

4.5000 4.5000 4.5000 4.5000

[torch.FloatTensor of size 2x2]

4.5是怎麼算出來的呢,從前面的公式可以看出z=(x+2)*(x+2)3,它的導數是3(x+2)/2,當x=1時導數的值就是3*(1+2)/2=4.5。和pytorch計算得出的結果是一致的。

相關文章