pytorch之關于PyTorch結構介紹
PyTorch結構介紹
對PyTorch架構的粗淺理解,不能保證完全正確,但是希望可以從更高層次上對PyTorch上有個整體把握。
幾個重要的類型
和數(shù)值相關的
- Tensor
- Variable
- Parameter
- buffer(這個其實不能叫做類型,其實他就是用來保存tensor的)
Tensor:
PyTorch 中的計算基本都是基于 Tensor 的,可以說是 PyTorch 中的基本計算單元。
Variable:
Tensor 的一個 Wrapper ,其中保存了 Variable 的創(chuàng)造者, Variable 的值(tensor),還有 Variable 的梯度( Variable )。
自動求導機制的核心組件,因為它不僅保存了 變量的值,還保存了變量是由哪個 op 產(chǎn)生的。這在反向傳導的過程中是十分重要的。
Variable 的前向過程的計算包括兩個部分的計算,一個是其值的計算(即,Tensor的計算),還有就是 Variable 標簽的計算。標簽指的是什么呢?如果您看過PyTorch的官方文檔 Excluding subgraphs from backward 部分的話,您就會發(fā)現(xiàn) Variable 還有兩個標簽: requires_grad 和 volatile 。標簽的計算指的就是這個。
Paramete:
這個類是 Variable 的一個子集, PyTorch 給出這個類的定義是為了在 Module (下面會談到)中添加模型參數(shù)方便。
模型相關的
- Function
- Module
Function:
如果您想在 PyTorch 中自定義 OP 的話,您需要繼承這個類,您需要在繼承的時候復寫 forward 和 backward 方法,可能還需要復寫 __init__ 方法(由于篇幅控制,這里不再詳細贅述如果自定義 OP )。您需要在 forward 中定義 OP ,在 backward 說明如何計算梯度。關于 Function ,還需要知道的一點就是, Function 中 forward 和 backward 方法中進行計算的類型都是 Tensor ,而不是我們傳入的Variable。計算完forward和backward之后,會包裝成Varaible返回。這種設定倒是可以理解的,因為OP是一個整體嘛,OP內(nèi)部的計算不需要記錄creator
Module:
這個類和 Function 是有點區(qū)別的,回憶一下,我們定義 Function 的時候, Funciton 本身是不需要變量的,而 Module 是變量和 Function 的結合體。在某些時候,我們更傾向稱這種結構為 Layer 。但是這里既然這么叫,那就這么叫吧。
Module 實際上是一個容器,我們可以繼承 Module ,在里面加幾個參數(shù),從而實現(xiàn)一個簡單全連接層。我們也可以繼承 Module ,在里面加入其它 Module ,從而實現(xiàn)整個 VGG 結構。
關于hook
PyTorch中注冊的hook都是不允許改變hook的輸入值的
下面對PyTorch中出現(xiàn)hook的地方做個總結:
* Module : register_forward_hook, register_backward_hook
注意:forward_hook不能用來修改Module的輸出值,它的功能就像是安裝個監(jiān)視器一樣。
我們可以用forward_hook和visdom來監(jiān)控我們Module的輸出。
backward_hook和與 Variable 的功能是類似的,將和 Variable 的 register_hook 一起介紹。
- Variable: register_hook
- Variable的register_hook注冊的是一個
backward hook,backward hook是在BP的過程中會用到的。可以用它來處理計算的梯度。
foward過程與backward過程
forward
以一個Module為例:
- 1. 調(diào)用module的
call方法 - 2.
module的call里面調(diào)用module的forward方法 - 3.
forward里面如果碰到Module的子類,回到第1步,如果碰到的是Function的子類,繼續(xù)往下 - 4. 調(diào)用
Function的call方法 - 5.
Function的call方法調(diào)用了Function的forward方法。 - 6.
Function的forward返回值 - 7.
module的forward返回值 - 8. 在
module的call進行forward_hook操作,然后返回值。
backward
總結
PyTorch基本的操作是 OP ,被操作數(shù)是 Tensor 。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python 元組拆包示例(Tuple Unpacking)
今天小編就為大家分享一篇Python 元組拆包實例(Tuple Unpacking),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
pycharm的console輸入實現(xiàn)換行的方法
今天小編就為大家分享一篇pycharm的console輸入實現(xiàn)換行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python?異步之在?Asyncio中如何運行阻塞任務詳解
這篇文章主要為大家介紹了Python?異步之在?Asyncio?中運行阻塞任務示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

