小編給大家分享一下Pytorch如何實(shí)現(xiàn)權(quán)重初始化,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
射陽(yáng)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!在TensorFlow中,權(quán)重的初始化主要是在聲明張量的時(shí)候進(jìn)行的。 而PyTorch則提供了另一種方法:首先應(yīng)該聲明張量,然后修改張量的權(quán)重。通過(guò)調(diào)用torch.nn.init包中的多種方法可以將權(quán)重初始化為直接訪問(wèn)張量的屬性。
1、不初始化的效果
在Pytorch中,定義一個(gè)tensor,不進(jìn)行初始化,打印看看結(jié)果:
w = torch.Tensor(3,4) print (w)
可以看到這時(shí)候的初始化的數(shù)值都是隨機(jī)的,而且特別大,這對(duì)網(wǎng)絡(luò)的訓(xùn)練必定不好,最后導(dǎo)致精度提不上,甚至損失無(wú)法收斂。
2、初始化的效果
PyTorch提供了多種參數(shù)初始化函數(shù):
torch.nn.init.constant(tensor, val) torch.nn.init.normal(tensor, mean=0, std=1) torch.nn.init.xavier_uniform(tensor, gain=1)
等等。詳細(xì)請(qǐng)參考:http://pytorch.org/docs/nn.html#torch-nn-init
注意上面的初始化函數(shù)的參數(shù)tensor,雖然寫的是tensor,但是也可以是Variable類型的。而神經(jīng)網(wǎng)絡(luò)的參數(shù)類型Parameter是Variable類的子類,所以初始化函數(shù)可以直接作用于神經(jīng)網(wǎng)絡(luò)參數(shù)。實(shí)際上,我們初始化也是直接去初始化神經(jīng)網(wǎng)絡(luò)的參數(shù)。
讓我們?cè)囋囆Ч?
w = torch.Tensor(3,4) torch.nn.init.normal_(w) print (w)
3、初始化神經(jīng)網(wǎng)絡(luò)的參數(shù)
對(duì)神經(jīng)網(wǎng)絡(luò)的初始化往往放在模型的__init__()函數(shù)中,如下所示:
class Net(nn.Module):
def __init__(self, block, layers, num_classes=1000): self.inplanes = 64 super(Net, self).__init__() *** *** #定義自己的網(wǎng)絡(luò)層 *** for m in self.modules(): if isinstance(m, nn.Conv2d): n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels m.weight.data.normal_(0, math.sqrt(2. / n)) elif isinstance(m, nn.BatchNorm2d): m.weight.data.fill_(1) m.bias.data.zero_() *** *** #定義后續(xù)的函數(shù) ***
也可以采取另一種方式:
定義一個(gè)權(quán)重初始化函數(shù),如下:
def weights_init(m): classname = m.__class__.__name__ if classname.find('Conv2d') != -1: init.xavier_normal_(m.weight.data) init.constant_(m.bias.data, 0.0) elif classname.find('Linear') != -1: init.xavier_normal_(m.weight.data) init.constant_(m.bias.data, 0.0)
在模型聲明時(shí),調(diào)用初始化函數(shù),初始化神經(jīng)網(wǎng)絡(luò)參數(shù):
model = Net(*****) model.apply(weights_init)pytorch的優(yōu)點(diǎn)
1.PyTorch是相當(dāng)簡(jiǎn)潔且高效快速的框架;2.設(shè)計(jì)追求最少的封裝;3.設(shè)計(jì)符合人類思維,它讓用戶盡可能地專注于實(shí)現(xiàn)自己的想法;4.與google的Tensorflow類似,F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新;5.PyTorch作者親自維護(hù)的論壇 供用戶交流和求教問(wèn)題6.入門簡(jiǎn)單
看完了這篇文章,相信你對(duì)“Pytorch如何實(shí)現(xiàn)權(quán)重初始化”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前名稱:Pytorch如何實(shí)現(xiàn)權(quán)重初始化-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://aaarwkj.com/article34/cchdse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化、做網(wǎng)站
聲明:本網(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)
猜你還喜歡下面的內(nèi)容