真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問題,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(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ù)訪問和遍歷:

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

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

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

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

當(dāng)然,也可以使用索引來按層訪問,因?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ù)來進(jìn)行值和梯度的訪問:

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

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

當(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()的問題;

該形式表示該參數(shù)并不隨著backward進(jìn)行更改,常常用來進(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ù)來返回標(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)的支持。


網(wǎng)頁題目:如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問題
瀏覽地址:http://weahome.cn/article/gsphcp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部