日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

pytorch学习笔记(九):PyTorch结构介绍

發(fā)布時(shí)間:2023/11/28 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch学习笔记(九):PyTorch结构介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PyTorch結(jié)構(gòu)介紹
對(duì)PyTorch架構(gòu)的粗淺理解,不能保證完全正確,但是希望可以從更高層次上對(duì)PyTorch上有個(gè)整體把握。水平有限,如有錯(cuò)誤,歡迎指錯(cuò),謝謝!

幾個(gè)重要的類型
和數(shù)值相關(guān)的
Tensor
Variable
Parameter
buffer(這個(gè)其實(shí)不能叫做類型,其實(shí)他就是用來(lái)保存tensor的)
Tensor:
PyTorch中的計(jì)算基本都是基于Tensor的,可以說(shuō)是PyTorch中的基本計(jì)算單元。

Variable:
Tensor的一個(gè)Wrapper,其中保存了Variable的創(chuàng)造者,Variable的值(tensor),還有Variable的梯度(Variable)。

自動(dòng)求導(dǎo)機(jī)制的核心組件,因?yàn)樗粌H保存了 變量的值,還保存了變量是由哪個(gè)op產(chǎn)生的。這在反向傳導(dǎo)的過(guò)程中是十分重要的。

Variable的前向過(guò)程的計(jì)算包括兩個(gè)部分的計(jì)算,一個(gè)是其值的計(jì)算(即,Tensor的計(jì)算),還有就是Variable標(biāo)簽的計(jì)算。標(biāo)簽指的是什么呢?如果您看過(guò)PyTorch的官方文檔 Excluding subgraphs from backward 部分的話,您就會(huì)發(fā)現(xiàn)Variable還有兩個(gè)標(biāo)簽:requires_grad和volatile。標(biāo)簽的計(jì)算指的就是這個(gè)。

Parameter:
這個(gè)類是Variable的一個(gè)子集,PyTorch給出這個(gè)類的定義是為了在Module(下面會(huì)談到)中添加模型參數(shù)方便。

模型相關(guān)的
Function
Module
Function:
如果您想在PyTorch中自定義OP的話,您需要繼承這個(gè)類,您需要在繼承的時(shí)候復(fù)寫forward和backward方法,可能還需要復(fù)寫__init__方法(由于篇幅控制,這里不再詳細(xì)贅述如果自定義OP)。您需要在forward中定義OP,在backward說(shuō)明如何計(jì)算梯度。
關(guān)于Function,還需要知道的一點(diǎn)就是,Function中forward和backward方法中進(jìn)行計(jì)算的類型都是Tensor,而不是我們傳入的Variable。計(jì)算完forward和backward之后,會(huì)包裝成Varaible返回。這種設(shè)定倒是可以理解的,因?yàn)镺P是一個(gè)整體嘛,OP內(nèi)部的計(jì)算不需要記錄creator

Module:
這個(gè)類和Function是有點(diǎn)區(qū)別的,回憶一下,我們定義Function的時(shí)候,Funciton本身是不需要變量的,而Module是變量和Function的結(jié)合體。在某些時(shí)候,我們更傾向稱這種結(jié)構(gòu)為L(zhǎng)ayer。但是這里既然這么叫,那就這么叫吧。

Module實(shí)際上是一個(gè)容器,我們可以繼承Module,在里面加幾個(gè)參數(shù),從而實(shí)現(xiàn)一個(gè)簡(jiǎn)單全連接層。我們也可以繼承Module,在里面加入其它Module,從而實(shí)現(xiàn)整個(gè)VGG結(jié)構(gòu)。

關(guān)于hook
PyTorch中注冊(cè)的hook都是不允許改變hook的輸入值的
下面對(duì)PyTorch中出現(xiàn)hook的地方做個(gè)總結(jié):
* Module : register_forward_hook, register_backward_hook
注意:forward_hook不能用來(lái)修改Module的輸出值,它的功能就像是安裝個(gè)監(jiān)視器一樣。我們可以用forward_hook和visdom來(lái)監(jiān)控我們Module的輸出。backward_hook和與Variable的功能是類似的,將和Variable的register_hook一起介紹。

Variable: register_hook
Variable的register_hook注冊(cè)的是一個(gè)backward hook,backward hook是在BP的過(guò)程中會(huì)用到的。可以用它來(lái)處理計(jì)算的梯度。
關(guān)于hook較為詳盡的介紹

foward過(guò)程與backward過(guò)程
forward
以一個(gè)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進(jìn)行forward_hook操作,然后返回值。

backward
關(guān)于backward

總結(jié)
PyTorch基本的操作是OP,被操作數(shù)是Tensor。
---------------------
作者:ke1th
來(lái)源:CSDN
原文:https://blog.csdn.net/u012436149/article/details/70145598
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的pytorch学习笔记(九):PyTorch结构介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。