91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch多種模型構造方法

發布時間:2021-07-10 14:51:29 來源:億速云 閱讀:210 作者:chen 欄目:大數據

本篇內容介紹了“Pytorch多種模型構造方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

之前的樣例主要采用Sequential來進行,這里做一個全面和充分的小結,以前只是單純的疊網絡,看完這章節才知道原來可以用的手法這么多;

對于基礎的網絡搭建,主要用到的是Module類,Sequential類為主;

其中Module可以算是基類,而派生類為Sequential、ModuleList、ModuleDict類,各自有各自的特點;

Sequential類:

Sequential類主要繼承自Module類,是最簡單的網絡逐層累加方式;

例如最簡單的疊加方式:

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

使用這種方法的特點是:

1.簡單,但是不能由較高靈活的定制化;

2.不用自定義forward前向傳播函數,層與層之間的參數尺寸必須要匹配;

ModuleList類:

如下所示:

net=nn.ModuleList([nn.Linear(784,256),nn.ReLU()])
net.append(nn.Linear(256,10))

Pytorch多種模型構造方法

這種也和Sequential類似,進行列表化構造網絡;

但是需要注意的是,需要定義Forward函數,只有Sequential類不需要自定義Forward函數;

ModuleDict類:

ModuleDict類似于Sequential類的定義方式,并且可以通過字典方式進行索引查找;

net=nn.ModuleDict({
    'linear':nn.Linear(784,256),
    'act':nn.ReLU()
})

net['output']=nn.Linear(256,10)

但是和ModuleList類似,需要重新定義forward前向傳播函數;

使用多種Module進行復雜網絡構建:

例如:

class FancyMLP(nn.Module):
    def __init__(self, **kwargs):
        super(FancyMLP, self).__init__(**kwargs)
        self.rand_weight = torch.rand((20, 20), requires_grad=False) # 不可訓練參數(常數參數)
        self.linear = nn.Linear(20, 20)
    def forward(self, x):
        x = self.linear(x)
        # 使用創建的常數參數,以及nn.functional中的relu函數和mm函數
        x = nn.functional.relu(torch.mm(x, self.rand_weight.data) + 1)
        # 復用全連接層。等價于兩個全連接層共享參數
        x = self.linear(x)
        # 控制流,這里我們需要調用item函數來返回標量進行比較
        while x.norm().item() > 1:
            x /= 2
        if x.norm().item() < 0.8:
            x *= 10
        return x.sum()

這里值得注意的是,盡管只有一個Linear層,但是對于forward有了更多的操作空間;

forward函數相當于過了兩個linear層,之后對其中的數據進行了處理;

所以對于Module可以有更多的操作空間,例如使用上述網絡進行復雜網絡定制;

例如,可以采用如下方法,進行多層Module嵌套,并且定義各自的forward函數;

class SelfMLP(nn.Module):
    def __init__(self,**kwargs):
        super(SelfMLP, self).__init__(**kwargs)
        self.ran_weight=torch.rand((20,20),requires_grad=False)
        self.linear=nn.Linear(20,20)
    def forward(self,x):
        x=self.linear(x)
        x=nn.functional.relu(torch.mm(x))

class NestMLP(nn.Module):
    def __init__(self,**kwargs):
        super(NestMLP, self).__init__(**kwargs)
        self.net=nn.Sequential(nn.Linear(40,30),nn.ReLU())

    def forward(self,x):
        return self.net(x)

net=nn.Sequential(NestMLP(),nn.Linear(30,20),SelfMLP())

“Pytorch多種模型構造方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

满洲里市| 罗江县| 丰原市| 龙山县| 沈丘县| 菏泽市| 榆中县| 三原县| 济源市| 丹棱县| 锡林郭勒盟| 鄄城县| 望谟县| 军事| 太原市| 澄迈县| 阿拉善左旗| 平利县| 沧源| 壶关县| 香河县| 迁安市| 长海县| 吉木乃县| 化德县| 卓资县| 土默特左旗| 枞阳县| 绥棱县| 喀什市| 平原县| 平陆县| 徐闻县| 凤城市| 雅江县| 嘉荫县| 洪雅县| 保定市| 耒阳市| 西宁市| 和平区|