第十八篇—模型參數(shù)的訪問、初始化和共享
部分一:模型參數(shù)的訪問
通過Module類的parameters()或named_parameters()方法訪問模型參數(shù);
代碼實現(xiàn):
打印結(jié)果:

可以發(fā)現(xiàn),named_parameters()方法是通過生成器來訪問模型參數(shù)的,關(guān)于生成器generator可參考算法崗面試總結(jié)—Python篇;對于通過Sequential類構(gòu)造的網(wǎng)絡(luò),可以進(jìn)行單層的訪問:
結(jié)果:

注意:
Parameter類是Tensor類的子類,如果一個Tensor是Parameter,則會被自動添加到模型的參數(shù)列表:
因為Parameter類是Tensor的子類,所以可由data訪問參數(shù)值,由grad訪問梯度:
結(jié)果:

部分二:模型參數(shù)的初始化
例如,將權(quán)重參數(shù)初始化成均值為0,標(biāo)準(zhǔn)差為0.01的正態(tài)分布隨機(jī)數(shù),偏差參數(shù)清零:
結(jié)果:

自定義初始化方法:使權(quán)重有一半的概率初始化為0,有另一半的概率初始化為[-10,-5]和[5,10]兩個區(qū)間里均勻分布的隨機(jī)數(shù),代碼實現(xiàn)如下;
結(jié)果:

我們可以通過data來改寫模型的參數(shù)值,而不影響梯度:
結(jié)果:

部分三:模型參數(shù)的共享
如果Sequential里是同一個Module實例,則這些Module實例的參數(shù)共享,代碼實現(xiàn)如下:
結(jié)果:

實際上,在內(nèi)存中,這兩個Module實例其實是同一個對象:
模型參數(shù)里包含了梯度,所以在反向傳播計算時,共享的參數(shù)的梯度會進(jìn)行累加:
結(jié)果:
