更新時間:2023-07-11 來源:黑馬程序員 瀏覽量:
神經(jīng)網(wǎng)絡(luò)參數(shù)初始化方法有很多種,以下是其中幾種常用的方法及其適用范圍:
參數(shù)按照均勻分布或高斯分布隨機(jī)初始化。適用于多種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和激活函數(shù),是最常用的初始化方法之一。
所有參數(shù)初始化為零。適用于線性激活函數(shù)(例如恒等函數(shù))的淺層網(wǎng)絡(luò),但不適用于深層網(wǎng)絡(luò),因?yàn)槊總€神經(jīng)元在反向傳播時將具有相同的梯度。
根據(jù)輸入和輸出神經(jīng)元的數(shù)量,將參數(shù)初始化為均勻分布或高斯分布的一種方式。適用于tanh、sigmoid等飽和型激活函數(shù)的淺層網(wǎng)絡(luò)。
與Xavier初始化類似,但在計算標(biāo)準(zhǔn)差時除以輸入神經(jīng)元數(shù)量的平方根。適用于ReLU和其變體(如Leaky ReLU)等非飽和型激活函數(shù)的網(wǎng)絡(luò)。
接下來筆者用一個簡單的示例,來具體演示下如何使用Python代碼實(shí)現(xiàn)參數(shù)的隨機(jī)初始化(方法1):
import numpy as np def initialize_parameters_random(layers_dims): parameters = {} L = len(layers_dims) for l in range(1, L): parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * 0.01 parameters['b' + str(l)] = np.zeros((layers_dims[l], 1)) return parameters # 示例用法 layers_dims = [5, 10, 7, 1] # 網(wǎng)絡(luò)結(jié)構(gòu):輸入層-10個神經(jīng)元隱藏層-7個神經(jīng)元隱藏層-輸出層1個神經(jīng)元 parameters = initialize_parameters_random(layers_dims) print("W1 = " + str(parameters["W1"])) print("b1 = " + str(parameters["b1"]))
需要注意的是,以上示例僅演示了隨機(jī)初始化的方法,其他初始化方法的代碼實(shí)現(xiàn)會有所不同。對于Xavier初始化和He初始化,我們可以參考相應(yīng)的論文或現(xiàn)有的深度學(xué)習(xí)框架的文檔,以了解更多實(shí)現(xiàn)細(xì)節(jié)。