pytorch学习笔记(九):PyTorch结构介绍
PyTorch結構介紹
對PyTorch架構的粗淺理解,不能保證完全正確,但是希望可以從更高層次上對PyTorch上有個整體把握。水平有限,如有錯誤,歡迎指錯,謝謝!
幾個重要的類型
和數值相關的
Tensor
Variable
Parameter
buffer(這個其實不能叫做類型,其實他就是用來保存tensor的)
Tensor:
PyTorch中的計算基本都是基于Tensor的,可以說是PyTorch中的基本計算單元。
Variable:
Tensor的一個Wrapper,其中保存了Variable的創造者,Variable的值(tensor),還有Variable的梯度(Variable)。
自動求導機制的核心組件,因為它不僅保存了 變量的值,還保存了變量是由哪個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基本的操作是OP,被操作數是Tensor。
---------------------
作者:ke1th
來源:CSDN
原文:https://blog.csdn.net/u012436149/article/details/70145598
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的pytorch学习笔记(九):PyTorch结构介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch学习笔记(十二):详解 M
- 下一篇: 深度学习的Xavier初始化方法