欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

人工智能學(xué)習(xí)PyTorch教程之層和塊

 更新時(shí)間:2021年11月25日 17:20:10   作者:LolitaAnn  
這篇文章主要為大家介紹了人工智能學(xué)習(xí)Pytorch教程中的層和塊的相關(guān)知識(shí)點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

對(duì)于多層感知機(jī)而言,整個(gè)模型做的事情就是接收輸入生成輸出。但是并不是所有的多層神經(jīng)網(wǎng)絡(luò)都一樣,所以為了實(shí)現(xiàn)復(fù)雜的神經(jīng)網(wǎng)絡(luò)就需要神經(jīng)網(wǎng)絡(luò)塊,塊可以描述單個(gè)層、由多個(gè)層組成的組件或整個(gè)模型本身。使用塊進(jìn)行抽象的一個(gè)好處是可以將一些塊組合成更大的組件。

從編程的角度來(lái)看,塊由類(class)表示。它的任何子類都必須定義一個(gè)將其輸入轉(zhuǎn)換為輸出的正向傳播函數(shù),并且必須存儲(chǔ)任何必需的參數(shù)。注意,有些塊不需要任何參數(shù)。最后,為了計(jì)算梯度,塊必須具有反向傳播函數(shù)。幸運(yùn)的是,在定義我們自己的塊時(shí),由于autograd 中引入)提供了一些后端實(shí)現(xiàn),我們只需要考慮正向傳播函數(shù)和必需的參數(shù)。

這一部分我們就要自定義自己的層和塊。

先用實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多層感知機(jī):

import torch
from torch import nn
from torch.nn import functional as F

net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))

X = torch.rand(2, 20)
net(X)

這個(gè)多層感知機(jī)包含一個(gè)具有256個(gè)單元和ReLU激活函數(shù)的全連接的隱藏層,然后是一個(gè)具有10個(gè)隱藏單元且不帶激活函數(shù)的全連接的輸出層。

通過(guò)實(shí)例化nn.Sequential來(lái)構(gòu)建我們的模型,層的執(zhí)行順序就是傳入?yún)?shù)的順序。

  • nn.Sequential定義了一種特殊的Module,即在PyTorch中表示一個(gè)塊的類。它維護(hù)了一個(gè)由Module組成的有序列表(Linear類是Module的子類)。
  • 正向傳播(forward)函數(shù):將列表中的每個(gè)塊連接在一起,將每個(gè)塊的輸出作為下一個(gè)塊的輸入。
  • 通過(guò)net(X)調(diào)用我們的模型來(lái)獲得模型的輸出。是net.__call__(X)的簡(jiǎn)寫。(這一句先不管他有什么,繼續(xù)往下看。)

我們也可以自己手寫一個(gè)多層感知機(jī):

class MLP(nn.Module):
    def __init__(self):
        # 調(diào)用`MLP`的父類的構(gòu)造函數(shù)來(lái)執(zhí)行必要的初始化。
        # 這樣,在類實(shí)例化時(shí)也可以指定其他函數(shù)參數(shù),例如模型參數(shù)`params`(稍后將介紹)
        super().__init__()
        
        self.hidden = nn.Linear(20, 256)  # 隱藏層
        self.out = nn.Linear(256, 10)  # 輸出層

    # 定義模型的正向傳播,即如何根據(jù)輸入`X`返回所需的模型輸出
    def forward(self, X):
        # 注意,這里我們使用ReLU的函數(shù)版本,其在nn.functional模塊中定義。
        return self.out(F.relu(self.hidden(X)))

net = MLP()
net(X)

通過(guò)super().__init__()調(diào)用父類的__init__函數(shù),省去了重復(fù)編寫適用于大多數(shù)塊的模版代碼的痛苦。

實(shí)例化兩個(gè)全連接層,分別為self.hidden和self.out。

除非我們實(shí)現(xiàn)一個(gè)新的運(yùn)算符,否則我們不用擔(dān)心反向傳播函數(shù)或參數(shù)初始化,系統(tǒng)將自動(dòng)生成這些。

前邊說(shuō)調(diào)用net() 就相當(dāng)于調(diào)用net.__call__(X),因?yàn)槲覀冊(cè)谧约旱腗LP中寫了forward,但是我們沒(méi)有調(diào)用,只使用net() 他就自動(dòng)執(zhí)行forward了。就是因?yàn)闀?huì)自動(dòng)調(diào)用.__call__函數(shù)使forward執(zhí)行。

說(shuō)完后兩條說(shuō)第一條:

有序是怎么實(shí)現(xiàn)的,構(gòu)建構(gòu)一個(gè)簡(jiǎn)化的MySequential:

class MySequential(nn.Module):
    def __init__(self, *args):
        super().__init__()
        for block in args:
            # 這里,`block`是`Module`子類的一個(gè)實(shí)例。我們把它保存在'Module'類的成員變量
            # `_modules` 中。`block`的類型是OrderedDict。
            self._modules[block] = block

    def forward(self, X):
        # OrderedDict保證了按照成員添加的順序遍歷它們
        for block in self._modules.values():
            X = block(X)
        return X

MySequential類提供了與默認(rèn)Sequential類相同的功能。

net = MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))
net(X)

用MySequential類實(shí)現(xiàn)的多層感知機(jī)和Sequential類實(shí)現(xiàn)的一樣。

注意這里只是寫出了其執(zhí)行順序,是簡(jiǎn)化版的Sequential類!

到此這篇關(guān)于人工智能學(xué)習(xí)PyTorch教程之層和塊的文章就介紹到這了,更多相關(guān)PyTorch 層和塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python編程中time模塊的使用

    詳解Python編程中time模塊的使用

    這篇文章主要介紹了詳解Python編程中time模塊的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Flask入門之上傳文件到服務(wù)器的方法示例

    Flask入門之上傳文件到服務(wù)器的方法示例

    這篇文章主要介紹了Flask入門之上傳文件到服務(wù)器的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python?random庫(kù)的簡(jiǎn)單使用demo

    python?random庫(kù)的簡(jiǎn)單使用demo

    這篇文章主要為大家介紹了python?random庫(kù)的簡(jiǎn)單使用demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • OpenCV平滑處理的實(shí)現(xiàn)示例

    OpenCV平滑處理的實(shí)現(xiàn)示例

    本文主要介紹了OpenCV平滑處理的實(shí)現(xiàn)示例,Opencv中濾波方式可分為均值濾波、高斯濾波和中值濾波,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • python os.listdir()亂碼解決方案

    python os.listdir()亂碼解決方案

    在本篇文章里小編給大家整理的是一篇關(guān)于python os.listdir()亂碼解決方案,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • TensorFlow的環(huán)境配置與安裝方法

    TensorFlow的環(huán)境配置與安裝方法

    這篇文章主要介紹了TensorFlow的環(huán)境配置與安裝方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法

    python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法

    這篇文章主要介紹了python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法,主要涉及了pefile模塊的用法,需要的朋友可以參考下
    2014-10-10
  • Python讀取hdf文件并轉(zhuǎn)化為tiff格式輸出

    Python讀取hdf文件并轉(zhuǎn)化為tiff格式輸出

    這篇文章主要介紹了Python讀取hdf文件并轉(zhuǎn)化為tiff格式輸出,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • python批量修改文件名的三種方法實(shí)例

    python批量修改文件名的三種方法實(shí)例

    同事最近有個(gè)需求,需要批量修改文件的名稱,這篇文章主要給大家介紹了關(guān)于python批量修改文件名的三種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python?dbm庫(kù)利用鍵值對(duì)存儲(chǔ)數(shù)據(jù)

    Python?dbm庫(kù)利用鍵值對(duì)存儲(chǔ)數(shù)據(jù)

    Python中的dbm模塊提供了一種輕量級(jí)的數(shù)據(jù)庫(kù)管理工具,允許開(kāi)發(fā)者使用鍵值對(duì)的形式存儲(chǔ)和檢索數(shù)據(jù),這篇文章將深入介紹dbm庫(kù)的使用,探討其基礎(chǔ)功能、高級(jí)特性以及實(shí)際應(yīng)用場(chǎng)景
    2023-12-12

最新評(píng)論