欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問(wèn)題

如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問(wèn)題,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)專注于二連浩特企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。二連浩特網(wǎng)站建設(shè)公司,為二連浩特等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

參數(shù)訪問(wèn)和遍歷:

對(duì)于模型參數(shù),我們可以進(jìn)行訪問(wèn);

由于Sequential由Module繼承而來(lái),所以可以使用Module鐘的parameter()或者named_parameters方法來(lái)訪問(wèn)所有的參數(shù);

例如,對(duì)于使用Sequential搭建的網(wǎng)絡(luò),可以使用下列for循環(huán)直接進(jìn)行遍歷:

for name, param in net.named_parameters():
    print(name, param.size())

當(dāng)然,也可以使用索引來(lái)按層訪問(wèn),因?yàn)楸旧砭W(wǎng)絡(luò)也是按層搭建的:

for name, param in net[0].named_parameters():
    print(name, param.size(), type(param))

當(dāng)我們獲取某一層的參數(shù)信息后,可以使用data()和grad()函數(shù)來(lái)進(jìn)行值和梯度的訪問(wèn):

weight_0 = list(net[0].parameters())[0]
print(weight_0.data)
print(weight_0.grad) # 反向傳播前梯度為None
Y.backward()
print(weight_0.grad)

參數(shù)初始化問(wèn)題:

當(dāng)我們參用for循環(huán)獲取每層參數(shù),可以采用如下形式對(duì)w和偏置b進(jìn)行初值設(shè)定:

for name, param in net.named_parameters():
    if 'weight' in name:
        init.normal_(param, mean=0, std=0.01)
        print(name, param.data)

for name, param in net.named_parameters():
    if 'bias' in name:
        init.constant_(param, val=0)
        print(name, param.data)

當(dāng)然,我們也可以進(jìn)行初始化函數(shù)的自定義設(shè)置:

def init_weight_(tensor):
    with torch.no_grad():
        tensor.uniform_(-10, 10)
        tensor *= (tensor.abs() >= 5).float()

for name, param in net.named_parameters():
    if 'weight' in name:
        init_weight_(param)
        print(name, param.data)

這里注意一下torch.no_grad()的問(wèn)題;

該形式表示該參數(shù)并不隨著backward進(jìn)行更改,常常用來(lái)進(jìn)行局部網(wǎng)絡(luò)參數(shù)固定的情況;

如該連接所示:關(guān)于no_grad()

共享參數(shù):

可以自定義Module類,在forward中多次調(diào)用同一個(gè)層實(shí)現(xiàn);

如上章節(jié)的代碼所示:

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

所以可以看到,相當(dāng)于同時(shí)在同一個(gè)網(wǎng)絡(luò)中調(diào)用兩次相同的Linear實(shí)例,所以變相實(shí)現(xiàn)了參數(shù)共享;

suo'yi注意一下,如果傳入Sequential模塊的多層都是同一個(gè)Module實(shí)例的話,則他們共享參數(shù);

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

當(dāng)前標(biāo)題:如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問(wèn)題
當(dāng)前鏈接:http://www.chinadenli.net/article28/gsphcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站ChatGPT虛擬主機(jī)網(wǎng)站改版網(wǎng)站維護(hù)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)