天天看點

PyTorch教程之Autograd

在PyTorch中,autograd是所有神經網絡的核心内容,為Tensor所有操作提供自動求導方法。

它是一個按運作方式定義的架構,這意味着backprop是由代碼的運作方式定義的。

autograd.Variable 是autograd中最核心的類。 它包裝了一個Tensor,并且幾乎支援所有在其上定義的操作。一旦完成了你的運算,你可以調用 .backward()來自動計算出所有的梯度。

Variable有三個屬性:data,grad以及creator。

通路原始的tensor使用屬性.data;  關于這一Variable的梯度則集中于 .grad;  .creator反映了建立者,辨別了是否由使用者使用.Variable直接建立(None)。

PyTorch教程之Autograd

還有一個對autograd的實作非常重要的類——Function。Variable 和Function數是互相關聯的,并建立一個非循環圖,進而編碼完整的計算過程。每個變量都有一個.grad_fn屬性引用建立變量的函數(除了使用者建立的變量,它們的grad_fn是None)。

建立變量x:

 輸出結果:

在x基礎上進行運算:

輸出結果:

<code>檢視x的</code>grad_fn:

<code>檢視y的</code>grad_fn:

<code>可以看到y是作為運算的結果産生的,是以y有</code><code>grad_fn,而x是直接建立的,是以x沒有grad_fn。</code>

 在y基礎上進行運算: 

<code>如果Variable是一個标量(例如它包含一個單元素資料),你無需對backward()指定任何參數.</code>

<code>out.backward()</code>等價于<code>out.backward(torch.Tensor([1.0])).</code>

PyTorch教程之Autograd

如果它有更多的元素(矢量),你需要指定一個和tensor的形狀比對的grad_output參數(y在指定方向投影對x的導數)

不傳入參數:

傳入參數:

簡單測試一下不同參數的效果:

參數1:[1,1,1]

 參數2:[3,2,1] 

繼續閱讀