中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

德令哈市| 芒康县| 库尔勒市| 广州市| 象州县| 武义县| 兴安盟| 桓仁| 罗田县| 新竹市| 阳西县| 新晃| 肥乡县| 平原县| 色达县| 沧源| 同江市| 阳东县| 云浮市| 四会市| 玉门市| 岚皋县| 久治县| 峨边| 鹤庆县| 红河县| 平乐县| 海丰县| 胶州市| 锦州市| 保靖县| 定州市| 台东县| 晋宁县| 兰考县| 天津市| 恩平市| 吴桥县| 五莲县| 印江| 绥芬河市|