pytorch結構介紹
tensor
variable
parameter
buffer(這個其實不能叫做型別,其實他就是用來儲存tensor的)
tensor:
pytorch中的計算基本都是基於tensor的,可以說是pytorch中的基本計算單元。
自動求導機制的核心元件,因為它不僅儲存了 變數的值,還儲存了變數是由哪個op產生的。這在反向傳導的過程中是十分重要的。
variable的前向過程的計算包括兩個部分的計算,乙個是其值的計算(即,tensor的計算),還有就是variable標籤的計算。標籤指的是什麼呢?如果您看過pytorch的官方文件 excluding subgraphs from backward 部分的話,您就會發現variable還有兩個標籤:requires_grad和volatile。標籤的計算指的就是這個。
parameter:
這個類是variable的乙個子集,pytorch給出這個類的定義是為了在module(下面會談到)中新增模型引數方便。
模型相關的
function
module
function:
如果您想在pytorch中自定義op的話,您需要繼承這個類,您需要在繼承的時候複寫forward和backward方法,可能還需要複寫__init__方法(由於篇幅控制,這裡不再詳細贅述如果自定義op)。您需要在forward中定義op,在backward說明如何計算梯度。
關於function,還需要知道的一點就是,function中forward和backward方法中進行計算的型別都是tensor,而不是我們傳入的variable。計算完forward和backward之後,會包裝成varaible返回。這種設定倒是可以理解的,因為op是乙個整體嘛,op內部的計算不需要記錄creator
module:
這個類和function是有點區別的,回憶一下,我們定義function的時候,funciton本身是不需要變數的,而module是變數和function的結合體。在某些時候,我們更傾向稱這種結構為layer。但是這裡既然這麼叫,那就這麼叫吧。
module實際上是乙個容器,我們可以繼承module,在裡面加幾個引數,從而實現乙個簡單全連線層。我們也可以繼承module,在裡面加入其它module,從而實現整個vgg結構。
關於hook
pytorch中註冊的hook都是不允許改變hook的輸入值的
下面對pytorch**現hook的地方做個總結:
* module : register_forward_hook, register_backward_hook
注意:forward_hook不能用來修改module的輸出值,它的功能就像是安裝個監視器一樣。我們可以用forward_hook和visdom來監控我們module的輸出。backward_hook和與variable的功能是類似的,將和variable的register_hook一起介紹。
variable: register_hook
variable的register_hook註冊的是乙個backward hook,backward hook是在bp的過程中會用到的。可以用它來處理計算的梯度。
關於hook較為詳盡的介紹
foward過程與backward過程
forward
以乙個module為例:
1. 呼叫module的call方法
2. module的call裡面呼叫module的forward方法
3. forward裡面如果碰到module的子類,回到第1步,如果碰到的是function的子類,繼續往下
4. 呼叫function的call方法
5. function的call方法呼叫了function的forward方法。
6. function的forward返回值
7. module的forward返回值
8. 在module的call進行forward_hook操作,然後返回值。
backward
關於backward
總結
pytorch下VOC的結構
資料夾結構 棉牙 建立資料夾結構 vocdevkit vocdevkit voccode vocdevkit results voc2007 vocdevkit local voc2007 vocdevkit voc2007 annotations vocdevkit voc2007 imagese...
PyTorch學習 安裝PyTorch
例如,使用的是 windows 系統,想用 pip 安裝,python 是 3.6 版的,沒有 gpu 加速,那就按上面的選,然後根據上面的提示,在 terminal 中輸入以下指令就好了 pip3 install torch 1.3.1 cpu torchvision 0.4.2 cpu ftor...
hostent結構介紹
這個資料結構是這樣的 struct hostent gethostbyname 成 功時返回乙個指向結構體 hostent 的指標,或者 是個空 null 指標。這裡是個例子 include include include int main void printf s n h h name prin...