中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

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

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

例如,對于使用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ù),可以采用如下形式對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)用同一個層實(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ù)用全連接層。等價于兩個全連接層共享參數(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)于同時在同一個網(wǎng)絡(luò)中調(diào)用兩次相同的Linear實(shí)例,所以變相實(shí)現(xiàn)了參數(shù)共享;

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

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

當(dāng)前標(biāo)題:如何解析Pytorch基礎(chǔ)中網(wǎng)絡(luò)參數(shù)初始化問題
當(dāng)前鏈接:http://www.rwnh.cn/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)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
武定县| 白银市| 英吉沙县| 鄱阳县| 贵南县| 东至县| 灵武市| 苏尼特右旗| 襄垣县| 林周县| 孝感市| 东方市| 郑州市| 顺昌县| 德钦县| 屏东县| 襄城县| 会东县| 通海县| 平潭县| 三河市| 资源县| 嘉善县| 屏边| 平湖市| 永安市| 澎湖县| 资阳市| 青阳县| 富川| 青冈县| 绥江县| 江北区| 郓城县| 水富县| 宁都县| 响水县| 定南县| 宿迁市| 黑河市| 海兴县|