訪問模型參數,初始化模型參數,共享模型參數方法

一. 訪問模型參數

對于使用Sequential類構造的神經網絡,我們可以通過方括號[]來訪問網絡的任一層。回憶一下上一節中提到的Sequential類與Block類的繼承關系。
對于Sequential實例中含模型參數的層,我們可以通過Block類的params屬性來訪問該層包含的所有參數。
下面,訪問多層感知機net中隱藏層的所有參數。索引0表示隱藏層為Sequential實例最先添加的層。

net[0].params, type(net[0].params)

可以看到,我們得到了一個由參數名稱映射到參數實例的字典(類型為ParameterDict類)。其中權重參數的名稱為dense0_weight,它由net[0]的名稱(dense0_)和自己的變量名(weight)組成。而且可以看到,該參數的形狀為(256, 20),且數據類型為32位浮點數(float32)。為了訪問特定參數,我們既可以通過名字來訪問字典里的元素,也可以直接使用它的變量名。下面兩種方法是等價的,但通常后者的代碼可讀性更好。

net[0].params['dense0_weight'], net[0].weight

Gluon里參數類型為Parameter類,它包含參數和梯度的數值,可以分別通過data函數和grad函數來訪問。因為我們隨機初始化了權重,所以權重參數是一個由隨機數組成的形狀為(256, 20)的NDArray。

net[0].weight.data()

權重梯度

net[0].weight.grad()

輸出層的偏差值。

net[1].bias.data()

最后,我們可以使用collect_params函數來獲取net變量所有嵌套(例如通過add函數嵌套)的層所包含的所有參數。它返回的同樣是一個由參數名稱到參數實例的字典。

net.collect_params()

二. 初始化模型參數

權重參數元素為[-0.07, 0.07]之間均勻分布的隨機數,偏差參數則全為0。但我們經常需要使用其他方法來初始化權重。MXNet的init模塊里提供了多種預設的初始化方法。在下面的例子中,我們將權重參數初始化成均值為0、標準差為0.01的正態分布隨機數,并依然將偏差參數清零。

# 非首次對模型初始化需要指定force_reinit為真
net.initialize(init=init.Normal(sigma=0.01), force_reinit=True)
net[0].weight.data()[0]

下面使用常數來初始化權重參數。

net.initialize(init=init.Constant(1), force_reinit=True)
net[0].weight.data()[0]

如果只想對某個特定參數進行初始化,我們可以調用Parameter類的initialize函數,它與Block類提供的initialize函數的使用方法一致。下例中我們對隱藏層的權重使用Xavier隨機初始化方法。

net[0].weight.initialize(init=init.Xavier(), force_reinit=True)
net[0].weight.data()[0]

三. 共享模型參數

在有些情況下,我們希望在多個層之間共享模型參數。“模型構造”一節介紹了如何在Block類的forward函數里多次調用同一個層來計算。這里再介紹另外一種方法,它在構造層的時候指定使用特定的參數。如果不同層使用同一份參數,那么它們在前向計算和反向傳播時都會共享相同的參數。在下面的例子里,我們讓模型的第二隱藏層(shared變量)和第三隱藏層共享模型參數。

net = nn.Sequential()
shared = nn.Dense(8, activation='relu')
net.add(nn.Dense(8, activation='relu'),shared,nn.Dense(8, activation='relu', params=shared.params),nn.Dense(10))
net.initialize()X = nd.random.uniform(shape=(2, 20))
net(X)net[1].weight.data()[0] == net[2].weight.data()[0]

我們在構造第三隱藏層時通過params來指定它使用第二隱藏層的參數。因為模型參數里包含了梯度,所以在反向傳播計算時,第二隱藏層和第三隱藏層的梯度都會被累加在shared.params.grad()里。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389300.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389300.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389300.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QZEZ第一屆“飯吉圓”杯程序設計競賽

終于到了飯吉圓杯的開賽,這是EZ我參與的歷史上第一場ACM賽制的題目然而沒有罰時 不過題目很好,舉辦地也很成功,為法老點贊!!! 這次和翰爺,吳駿達 dalao,陳樂揚dalao組的隊&#xff0…

談談數據分析 caoz_讓我們談談開放數據…

談談數據分析 caozAccording to the International Open Data Charter(1), it defines open data as those digital data that are made available with the technical and legal characteristics necessary so that they can be freely used, reused and redistributed by any…

數據創造價值_展示數據并創造價值

數據創造價值To create the maximum value, urgency, and leverage in a data partnership, you must present the data available for sale or partnership in a clear and comprehensive way. Partnerships are based upon the concept that you are offering value for valu…

Java入門系列-22-IO流

File類的使用 Java程序如何訪問文件?通過 java.io.File 類 使用File類需要先創建文件對象 File filenew File(String pathname);,創建時在構造函數中指定物理文件或目錄,然后通過文件對象的方法操作文件或目錄的屬性。 \ 是特殊字符&#xff…

缺了一部分

學Java好多年,也參與一次完整項目,覺得讓自己寫項目寫不出來,總覺得缺了一部分。 在這方面愚笨,不知道缺在哪里。以前覺得是知識不夠牢固,于是重復去學,發現就那些東西。如果沒有業務來熟悉的話&#xff0c…

卷積神經網絡——各種網絡的簡潔介紹和實現

各種網絡模型:來源《動手學深度學習》 一,卷積神經網絡(LeNet) LeNet分為卷積層塊和全連接層塊兩個部分。下面我們分別介紹這兩個模塊。 卷積層塊里的基本單位是卷積層后接最大池化層:卷積層用來識別圖像里的空間模…

數據中臺是下一代大數據_全棧數據科學:下一代數據科學家群體

數據中臺是下一代大數據重點 (Top highlight)Data science has been an eye-catching field for many years now to young individuals having formal education with a bachelors, masters or Ph.D. in computer science, statistics, business analytics, engineering manage…

net如何判斷瀏覽器的類別

回復:.net如何判斷瀏覽器的類別?瀏覽器型號:Request.Browser.Type 瀏覽器名稱:Request.Browser.browser 瀏覽器版本:Request.Browser.Version 瀏覽器Cookie:Request.Browser.Cookies 你的操作系統:Request…

AVS 端能力模塊

Mark 轉載于:https://www.cnblogs.com/clxye/p/9939333.html

pwn學習之四

本來以為應該能出一兩道ctf的pwn了,結果又被sctf打擊了一波。 bufoverflow_a 做這題時libc和堆地址都泄露完成了,卡在了unsorted bin attack上,由于delete會清0變量導致無法寫,一直沒構造出unsorted bin attack,后面根…

優化算法的簡潔實現

動量法 思想: 動量法使用了指數加權移動平均的思想。它將過去時間步的梯度做了加權平均,且權重按時間步指數衰減。 代碼: 在Gluon中,只需要在Trainer實例中通過momentum來指定動量超參數即可使用動量法。 d2l.train_gluon_ch7…

北方工業大學gpa計算_北方大學聯盟倉庫的探索性分析

北方工業大學gpa計算This is my firts publication here and i will start simple.這是我的第一篇出版物,這里我將簡單介紹 。 I want to make an exploratory data analysis of UFRN’s warehouse and answer some questions about the data using Python and Pow…

泰坦尼克數據集預測分析_探索性數據分析-泰坦尼克號數據集案例研究(第二部分)

泰坦尼克數據集預測分析Data is simply useless until you don’t know what it’s trying to tell you.除非您不知道數據在試圖告訴您什么,否則數據將毫無用處。 With this quote we’ll continue on our quest to find the hidden secrets of the Titanic. ‘The …

各種數據庫連接的總結

SQL數據庫的連接 return new SqlConnection("server127.0.0.1;databasepart;uidsa;pwd;"); oracle連接字符串 OracleConnection oCnn new OracleConnection("Data SourceORCL_SERVER;USERM70;PASSWORDmmm;");oledb連接數據庫return new OleDbConnection…

關于我

我是誰? Who am I?這是個哲學問題。。 簡單來說,我是Light,一個靠前端吃飯,又不想單單靠前端吃飯的Coder。 用以下幾點稍微給自己打下標簽: 工作了兩三年,對,我是16年畢業的90后一直…

L1和L2正則

https://blog.csdn.net/jinping_shi/article/details/52433975轉載于:https://www.cnblogs.com/zyber/p/9257843.html

基于PyTorch搭建CNN實現視頻動作分類任務代碼詳解

數據及具體講解來源: 基于PyTorch搭建CNN實現視頻動作分類任務 import torch import torch.nn as nn import torchvision.transforms as T import scipy.io from torch.utils.data import DataLoader,Dataset import os from PIL import Image from torch.autograd…

missforest_missforest最佳丟失數據插補算法

missforestMissing data often plagues real-world datasets, and hence there is tremendous value in imputing, or filling in, the missing values. Unfortunately, standard ‘lazy’ imputation methods like simply using the column median or average don’t work wel…

華碩猛禽1080ti_F-22猛禽動力回路的視頻分析

華碩猛禽1080tiThe F-22 Raptor has vectored thrust. This means that the engines don’t just push towards the front of the aircraft. Instead, the thrust can be directed upward or downward (from the rear of the jet). With this vectored thrust, the Raptor can …

聊天常用js代碼

<script languagejavascript>//轉意義字符與替換圖象以及字體HtmlEncode(text)function HtmlEncode(text){return text.replace(//"/g, &quot;).replace(/</g, <).replace(/>/g, >).replace(/#br#/g,<br>).replace(/IMGSTART/g,<IMG style…