在PyTorch中,autograd是所有神經網絡的核心内容,為Tensor所有操作提供自動求導方法。
它是一個按運作方式定義的架構,這意味着backprop是由代碼的運作方式定義的。
autograd.Variable 是autograd中最核心的類。 它包裝了一個Tensor,并且幾乎支援所有在其上定義的操作。一旦完成了你的運算,你可以調用 .backward()來自動計算出所有的梯度。
Variable有三個屬性:data,grad以及creator。
通路原始的tensor使用屬性.data; 關于這一Variable的梯度則集中于 .grad; .creator反映了建立者,辨別了是否由使用者使用.Variable直接建立(None)。

還有一個對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>
如果它有更多的元素(矢量),你需要指定一個和tensor的形狀比對的grad_output參數(y在指定方向投影對x的導數)
不傳入參數:
傳入參數:
簡單測試一下不同參數的效果:
參數1:[1,1,1]
參數2:[3,2,1]