pytorch之關(guān)于PyTorch結(jié)構(gòu)介紹
PyTorch結(jié)構(gòu)介紹
對PyTorch架構(gòu)的粗淺理解,不能保證完全正確,但是希望可以從更高層次上對PyTorch上有個整體把握。
幾個重要的類型
和數(shù)值相關(guān)的
- 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ù)方便。
模型相關(guān)的
- Function
- Module
Function:
如果您想在 PyTorch
中自定義 OP
的話,您需要繼承這個類,您需要在繼承的時候復寫 forward
和 backward
方法,可能還需要復寫 __init__
方法(由于篇幅控制,這里不再詳細贅述如果自定義 OP
)。您需要在 forward
中定義 OP
,在 backward
說明如何計算梯度。關(guān)于 Function
,還需要知道的一點就是, Function
中 forward
和 backward
方法中進行計算的類型都是 Tensor
,而不是我們傳入的Variable。計算完forward和backward之后,會包裝成Varaible返回。這種設(shè)定倒是可以理解的,因為OP是一個整體嘛,OP內(nèi)部的計算不需要記錄creator
Module:
這個類和 Function
是有點區(qū)別的,回憶一下,我們定義 Function
的時候, Funciton
本身是不需要變量的,而 Module
是變量和 Function
的結(jié)合體。在某些時候,我們更傾向稱這種結(jié)構(gòu)為 Layer
。但是這里既然這么叫,那就這么叫吧。
Module
實際上是一個容器,我們可以繼承 Module
,在里面加幾個參數(shù),從而實現(xiàn)一個簡單全連接層。我們也可以繼承 Module
,在里面加入其它 Module
,從而實現(xiàn)整個 VGG
結(jié)構(gòu)。
關(guān)于hook
PyTorch中注冊的hook都是不允許改變hook的輸入值的
下面對PyTorch中出現(xiàn)hook的地方做個總結(jié):
* 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的過程中會用到的??梢杂盟鼇硖幚碛嬎愕奶荻取?/li>
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
總結(jié)
PyTorch基本的操作是 OP
,被操作數(shù)是 Tensor
。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 元組拆包示例(Tuple Unpacking)
今天小編就為大家分享一篇Python 元組拆包實例(Tuple Unpacking),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python任意字符串轉(zhuǎn)16, 32, 64進制的方法
今天小編就為大家分享一篇Python任意字符串轉(zhuǎn)16, 32, 64進制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06pycharm的console輸入實現(xiàn)換行的方法
今天小編就為大家分享一篇pycharm的console輸入實現(xiàn)換行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python?異步之在?Asyncio中如何運行阻塞任務(wù)詳解
這篇文章主要為大家介紹了Python?異步之在?Asyncio?中運行阻塞任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03