pytorch自定義初始化權(quán)重的方法
在常見的pytorch代碼中,我們見到的初始化方式都是調(diào)用init類對(duì)每層所有參數(shù)進(jìn)行初始化。但是,有時(shí)我們有些特殊需求,比如用某一層的權(quán)重取優(yōu)化其它層,或者手動(dòng)指定某些權(quán)重的初始值。
核心思想就是構(gòu)造和該層權(quán)重同一尺寸的矩陣去對(duì)該層權(quán)重賦值。但是,值得注意的是,pytorch中各層權(quán)重的數(shù)據(jù)類型是nn.Parameter,而不是Tensor或者Variable。
import torch import torch.nn as nn import torch.optim as optim import numpy as np # 第一一個(gè)卷積層,我們可以看到它的權(quán)值是隨機(jī)初始化的 w=torch.nn.Conv2d(2,2,3,padding=1) print(w.weight) # 第一種方法 print("1.使用另一個(gè)Conv層的權(quán)值") q=torch.nn.Conv2d(2,2,3,padding=1) # 假設(shè)q代表一個(gè)訓(xùn)練好的卷積層 print(q.weight) # 可以看到q的權(quán)重和w是不同的 w.weight=q.weight # 把一個(gè)Conv層的權(quán)重賦值給另一個(gè)Conv層 print(w.weight) # 第二種方法 print("2.使用來自Tensor的權(quán)值") ones=torch.Tensor(np.ones([2,2,3,3])) # 先創(chuàng)建一個(gè)自定義權(quán)值的Tensor,這里為了方便將所有權(quán)值設(shè)為1 w.weight=torch.nn.Parameter(ones) # 把Tensor的值作為權(quán)值賦值給Conv層,這里需要先轉(zhuǎn)為torch.nn.Parameter類型,否則將報(bào)錯(cuò) print(w.weight)
附:Variable和Parameter的區(qū)別
Parameter 是torch.autograd.Variable的一個(gè)字類,常被用于Module的參數(shù)。例如權(quán)重和偏置。
Parameters和Modules一起使用的時(shí)候會(huì)有一些特殊的屬性。parameters賦值給Module的屬性的時(shí)候,它會(huì)被自動(dòng)加到Module的參數(shù)列表中,即會(huì)出現(xiàn)在Parameter()迭代器中。將Varaible賦給Module的時(shí)候沒有這樣的屬性。這可以在nn.Module的實(shí)現(xiàn)中詳細(xì)看一下。這樣做是為了保存模型的時(shí)候只保存權(quán)重偏置參數(shù),不保存節(jié)點(diǎn)值。所以復(fù)寫Variable加以區(qū)分。
另外一個(gè)不同是parameter不能設(shè)置volatile,而且require_grad默認(rèn)設(shè)置為true。Varaible默認(rèn)設(shè)置為False.
參數(shù):
parameter.data 得到tensor數(shù)據(jù)
parameter.requires_grad 默認(rèn)為True, BP過程中會(huì)求導(dǎo)
Parameter一般是在Modules中作為權(quán)重和偏置,自動(dòng)加入?yún)?shù)列表,可以進(jìn)行保存恢復(fù)。和Variable具有相同的運(yùn)算。
我們可以這樣簡單區(qū)分,在計(jì)算圖中,數(shù)據(jù)(包括輸入數(shù)據(jù)和計(jì)算過程中產(chǎn)生的feature map等)時(shí)variable類型,該類型不會(huì)被保存到模型中。 網(wǎng)絡(luò)的權(quán)重是parameter類型,在計(jì)算過程中會(huì)被更新,將會(huì)被保存到模型中。
以上這篇pytorch自定義初始化權(quán)重的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python讀取和修改Excel文件(基于xlrd、xlwt和openpyxl模塊)
本文介紹一下使用Python對(duì)Excel文件的基本操作,包括使用xlrd模塊讀取excel文件,使用xlwt模塊將數(shù)據(jù)寫入excel文件,使用openpyxl模塊讀取寫入和修改excel文件,需要的朋友可以參考下2021-11-11如何在Python中導(dǎo)入EXCEL數(shù)據(jù)
這篇文章主要介紹了使用Python處理EXCEL基礎(chǔ)操作篇1,如何在Python中導(dǎo)入EXCEL數(shù)據(jù),文中提供了解決思路和部分實(shí)現(xiàn)代碼,一起來看看吧2023-03-03OpenCV-Python實(shí)現(xiàn)輪廓檢測實(shí)例分析
這篇文章主要介紹了OpenCV-Python實(shí)現(xiàn)輪廓檢測實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python socket實(shí)現(xiàn)的簡單通信功能示例
這篇文章主要介紹了Python socket實(shí)現(xiàn)的簡單通信功能,結(jié)合實(shí)例形式分析了Python socket通信的相關(guān)概念、原理、客戶端與服務(wù)器端實(shí)現(xiàn)技巧以及socketserver模塊多并發(fā)簡單實(shí)現(xiàn)方法,需要的朋友可以參考下2018-08-08Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解
這篇文章主要為大家介紹了Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12python?matplotlib繪圖過程中設(shè)置線條顏色實(shí)戰(zhàn)舉例
Matplotlib是一個(gè)用于數(shù)據(jù)可視化和創(chuàng)建交互式圖表的Python庫,下面這篇文章主要給大家介紹了關(guān)于python?matplotlib繪圖過程中設(shè)置線條顏色的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05