在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    AI課堂第16講:DL深度學(xué)習(xí)-PyTorch計(jì)算圖與模型構(gòu)造

    AI課堂第16講:DL深度學(xué)習(xí)-PyTorch計(jì)算圖與模型構(gòu)造

    前面幾節(jié)我們學(xué)習(xí)了深度學(xué)習(xí)模型的基本原理與實(shí)現(xiàn),下面我們繼續(xù)學(xué)習(xí)深度學(xué)習(xí)計(jì)算的各個(gè)組成部分,為后續(xù)學(xué)習(xí)復(fù)雜模型打下基礎(chǔ)。

    在學(xué)習(xí)模型構(gòu)造之前,我們先了解一下什么是計(jì)算圖。

    計(jì)算圖 (Computational Graph)

    計(jì)算圖是用來描述運(yùn)算的有向無環(huán)圖,有兩個(gè)主要元素:

    節(jié)點(diǎn) (Node) :節(jié)點(diǎn)表示數(shù)據(jù),如向量、矩陣、張量。

    邊 (Edge):邊表示運(yùn)算,如加減乘除卷積等。

    用計(jì)算圖表示:y=(x1+w)*(x2+w),如下圖所示:

    計(jì)算圖

    其中,x1, x2, w, y 分別為節(jié)點(diǎn),+ ,* 為節(jié)點(diǎn)之間的操作,即邊。故y=a*b,其中a=x1+w, b=x2+w。

    計(jì)算圖與梯度求導(dǎo)

    求上圖y對(duì)w的導(dǎo)數(shù),根據(jù)復(fù)合函數(shù)的求導(dǎo)法則,推理如下:

    對(duì)應(yīng)到計(jì)算圖中,就是根節(jié)點(diǎn)y到葉子節(jié)點(diǎn)w有兩條路徑y(tǒng)->a->w和y->b->w。根節(jié)點(diǎn)依次對(duì)每條路徑的子節(jié)點(diǎn)求導(dǎo),直到葉子節(jié)點(diǎn)w,最后把每條路徑的導(dǎo)數(shù)相加即可,其實(shí)就是我們前面講過的反向傳播求偏導(dǎo)。

    總結(jié)為y對(duì)w求導(dǎo),就是從計(jì)算圖中找到所有y到w的路徑,然后把各個(gè)路徑的導(dǎo)數(shù)進(jìn)行求和。

    代碼演示如下:

    PyTorch動(dòng)態(tài)計(jì)算圖演示

    計(jì)算圖又分為靜態(tài)計(jì)算圖 (Static Computational Graph)和動(dòng)態(tài)計(jì)算圖 (Dynamic Computational Graph):

    動(dòng)態(tài)圖就是運(yùn)算和搭建同時(shí)進(jìn)行,也就是可以先計(jì)算前面的節(jié)點(diǎn)的值,再根據(jù)這些值搭建后面的計(jì)算圖。

    靜態(tài)圖是先搭建圖,然后再輸入數(shù)據(jù)進(jìn)行運(yùn)算,是先定義后運(yùn)行的方式,之后再次運(yùn)行的時(shí)候就不再需要重新構(gòu)建計(jì)算圖,所以速度會(huì)比動(dòng)態(tài)圖更快,但是不靈活。

    PyTorch因其動(dòng)態(tài)圖的特色吸引了很多使用者,而Tensorflow早期是用的靜態(tài)圖導(dǎo)致開發(fā)很不友好,后來也改成了動(dòng)態(tài)圖模式。

    tensorflow靜態(tài)計(jì)算圖演示

    動(dòng)態(tài)圖和靜態(tài)圖對(duì)比

    模型構(gòu)造

    PyTorch是基于動(dòng)態(tài)圖的模型搭建方式,我們可以隨機(jī)的在網(wǎng)絡(luò)中添加或者刪除網(wǎng)絡(luò)層。PyTorch為我們提供了非常方便的nn工具箱,我們搭建模型只需要定義一個(gè)繼承自nn.module的類并實(shí)現(xiàn)其init和forward方法就可。

    其中nn.Module類是nn模塊中提供的一個(gè)模型構(gòu)造類,是所有神經(jīng)網(wǎng)絡(luò)模塊的基礎(chǔ)類。我們需要繼承它來定義我們的自己的網(wǎng)絡(luò)結(jié)構(gòu)。init方法中動(dòng)態(tài)綁定成員變量,定義我們的網(wǎng)絡(luò)結(jié)構(gòu)和相關(guān)參數(shù);forword方法中決定數(shù)據(jù)流經(jīng)這些成員變量的順序,即網(wǎng)絡(luò)的前向傳播方式。

    PyTorch中nn工具箱的結(jié)構(gòu)示意圖

    一般來說,我們構(gòu)建網(wǎng)絡(luò)模型時(shí)用到的卷積層、全連接層、Dropout層等含有可學(xué)習(xí)參數(shù)的層都是繼承nn.Module,而激活函數(shù)、池化層等函數(shù)類型的層繼承于nn.functional。

    1.繼承Module類來構(gòu)造模型

    下面定義的MLP 類中無須定義反向傳播函數(shù)。系統(tǒng)將通過自動(dòng)求梯度而自動(dòng)生成反向傳播所需的backward 函數(shù)。

    我們可以實(shí)例化 MLP 類得到模型變量 net 。下的代碼初始化 net 并傳輸數(shù)據(jù) X 做次前向計(jì)算。其中, net(X) 會(huì)調(diào)用 MLP 繼承 Module 類的 __call__ 函數(shù),這個(gè)函數(shù)將調(diào)用 MLP 類定義的forward 函數(shù)來完成前向計(jì)算。

    繼承Module類的基礎(chǔ)模型

    這并沒有將 Module 類命名為 Layer (層)或者 Model (模型)之類的名字,這是因?yàn)樵擃愂且粋€(gè)可供自由組建的部件。它的子類既可以是一個(gè)層(如PyTorch提供的 Linear 類),又可以是個(gè)模型(如這定義的 MLP 類),或者是模型的一個(gè)部分。我們下面來展示它的靈活性。

    2.Module的子類

    PyTorch還提供了許多繼承自Module的類,如:Sequential、ModuleList和ModuleDict等。

    2.1Sequential類

    當(dāng)模型的前向計(jì)算為簡(jiǎn)單的串聯(lián)各個(gè)網(wǎng)絡(luò)層的時(shí)候,可以通過Sequential類以更加簡(jiǎn)單的方式來定義模型。Sequential可以接收一個(gè)子模塊的有序字典(OrderedDict)或者一系列的子模塊作為參數(shù)來逐一的添加Module的子類的實(shí)例。在前向傳播計(jì)算的時(shí)候,可以將這些實(shí)例按照添加的順序逐一計(jì)算,向前傳播。這里實(shí)現(xiàn)一個(gè)MySequential類,其機(jī)制和Sequential類似。

    舉例如下:

    Sequential類模型

    2.2 ModuleList類

    ModuleList類接收一個(gè)子模塊的列表作為輸入,也可以類似List那樣進(jìn)行append和extend操作。類似于我們建立一個(gè)list,list內(nèi)部中的每一個(gè)元素代表一個(gè)網(wǎng)絡(luò)層。

    舉例如下:

    ModuleList類模型

    ModuleList不同于一般的Python的list,加入到ModuleList里面的所有模塊的參數(shù)會(huì)被自動(dòng)添加到整個(gè)網(wǎng)絡(luò)中。

    2.3 ModuleDict類

    ModuleDict類接收一個(gè)子模塊的字典作為輸入,然后按照類似于字典的形式進(jìn)行添加訪問操作,舉例如下:

    ModuleDict類模型

    ModuleDict和ModuleList類似的是,ModuleDict實(shí)例僅僅是存放了一些模塊的字典,并沒有定義forward函數(shù),前向傳播的方式需要我們自己定義。同樣,ModuleDict也與Python的Dict有所不同,ModuleDict里的所有模塊的參數(shù)會(huì)被自動(dòng)添加到整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的內(nèi)部。

    3.構(gòu)造復(fù)雜的模型

    上面介紹的Sequential使用簡(jiǎn)單,但靈活性不足。通常我們還是自定義類,繼承nn.Module,去完成更復(fù)雜的模型定義和控制。下面的我們嘗試構(gòu)建一個(gè)復(fù)雜點(diǎn)的網(wǎng)絡(luò)來總結(jié)上面的內(nèi)容,該網(wǎng)絡(luò)中包含不被迭代的參數(shù),即常數(shù)參數(shù),還多次調(diào)用相同的層。

    復(fù)雜模型構(gòu)建

    總結(jié)

    PyTorch是基于動(dòng)態(tài)圖的模型搭建方式。

    Module類是PyTorch中所有神經(jīng)網(wǎng)絡(luò)模塊的基類,也是個(gè)可供自由構(gòu)建的模塊。它的子類既可以是個(gè)層(如PyTorch提供的 Linear 類),又可以是一個(gè)模型(如這里是定義的 MLP 類),或者是模型的一個(gè)部分。

    Sequential、ModuleList、ModuleDict類都繼承自Module類。

    Sequential內(nèi)的模塊需要按照順序排列,要保證相鄰層的輸入輸出大小相匹配,內(nèi)部forward功能已經(jīng)實(shí)現(xiàn)。與Sequential不同,ModuleList和ModuleDict并沒有定義一個(gè)完整的網(wǎng)絡(luò),它們只是將不同的模塊存放在一起,這些模塊之間沒有聯(lián)系也沒有順序(所以不用保證相鄰層的輸入輸出維度匹配),需要自己定義forward函數(shù)。

    雖然Sequential等類可以使模型構(gòu)造更加簡(jiǎn)單,但直接繼承Module類可以極大地拓展模型構(gòu)造的靈活性。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月6日 15:28
    下一篇 2022年7月6日 15:28

    相關(guān)推薦

    • 存儲(chǔ)過程語法(sql server存儲(chǔ)過程語法)

      今天小編給各位分享存儲(chǔ)過程語法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲(chǔ)過程基本語法…

      2022年11月26日
    • 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文(計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文七千字)

      今天小編給各位分享計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文的知識(shí),其中也會(huì)對(duì)計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文七千字進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! 計(jì)算機(jī)網(wǎng)絡(luò)方面的論文3000字…

      2022年11月26日
    • 手機(jī)上怎么買世界杯彩票(手機(jī)上怎么買世界杯輸贏)

      現(xiàn)在手機(jī)已經(jīng)成為大家生活中非常重要的工具之一,只要一部手機(jī)就可以解決衣食住行,最近世界杯火熱進(jìn)行,一些小伙伴想要買彩票,那么,手機(jī)上可以買世界杯彩票嗎?世界杯買球軟件是真的嗎?手機(jī)…

      2022年11月25日
    • 成都健康碼崩了是怎么回事(成都健康碼系統(tǒng)崩了)

      健康碼是大家出行必備的工具,有小伙伴反映自己健康碼崩了,上不了地鐵,那么成都健康碼崩了是怎么回事?成都健康碼怎么突然崩了?成都健康碼崩了是怎么辦?下面小編為大家?guī)沓啥冀】荡a崩了原…

      2022年11月24日
    • rnm退錢是什么意思網(wǎng)絡(luò)用語(rnm退錢是什么人)

      最近關(guān)于網(wǎng)絡(luò)用語使用還是有不少咨詢的,隨著卡塔爾世界杯的開啟,網(wǎng)上也出現(xiàn)了不少新的網(wǎng)絡(luò)流行用語,其中rnm退錢的梗也引發(fā)不少網(wǎng)友的好奇。rnm退錢是什么意思?很多網(wǎng)友對(duì)此好奇,rn…

      2022年11月24日
    • 關(guān)公繞后什么意思網(wǎng)絡(luò)用語(睜眼關(guān)公什么意思)

      關(guān)于一些網(wǎng)絡(luò)用語使用大家也都是比較關(guān)注的,最近關(guān)于關(guān)公繞后這個(gè)梗也是挺火的,不過還是有很多網(wǎng)友對(duì)關(guān)公繞后這個(gè)梗的含義不是很了解,關(guān)公繞后什么意思?這個(gè)梗說的是什么呢?下面來看下網(wǎng)絡(luò)…

      2022年11月24日
    • 銳龍97900x參數(shù)規(guī)格跑分評(píng)測(cè) 銳龍97900x屬于什么檔次

      銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號(hào)之一,它采用了這一代標(biāo)配的zen4架構(gòu)和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀(jì)發(fā)揮怎么樣呢,下面就來看看銳…

      2022年11月24日
    • 1千克等于多少磅

      克,此定義在1958年被美國(guó)以及其他英聯(lián)邦會(huì)員國(guó)承認(rèn)換算回來,一千克等于262磅,一磅等于037千克英國(guó)在1963年開始,依據(jù)度量衡法案的規(guī);1 磅=16 盎司=04536 千克 …

      2022年11月24日
    • 媽寶是什么意思網(wǎng)絡(luò)用語(媽寶男是什么意思)

      近期有關(guān)一些網(wǎng)絡(luò)用語使用也有不少人咨詢,其中媽寶這個(gè)詞在網(wǎng)上熱度也是挺高的。媽寶是什么意思?部分網(wǎng)友可能對(duì)媽寶這個(gè)詞的含義不是很了解,據(jù)悉在網(wǎng)絡(luò)上面有媒體人評(píng)論大s的時(shí)候使用到了媽…

      2022年11月23日
    • vivox90pro配置參數(shù)跑分詳情 vivox90pro是什么屏幕

      vivox90pro參數(shù)配置詳情怎么樣?vivo手機(jī)在昨晚舉行了X90系列發(fā)布會(huì),有普通款、pro款以及pro+款三個(gè)版本,那么vivox90pro具體配置怎么樣呢?下面就讓小編為…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息