如何初始化權重(三種方式)

2021-09-25 13:27:11 字數 2518 閱讀 6394

一、初始化為0

import numpy as np

layers_dim = [10,5,2,1]

def initialize_zeros(layers_dim):

'''引數:

輸入:lays_dims 列表,儲存的是每層的節點數量,layers_dim[0]是輸入x的數量,layers_dim[1]是第一層的節點數量

w1 :(layers_dim[1],layers_dim[0])

b1 : (layers_dim[1],1)

w2 : (layers_dim[2],layers_dim[1])

b2 : (layers_dim[1],1)

w3 : (layers_dim[3],layers_dim[2])

b3 : (layers_dim[3],1)

wl : (layers_dim[l],layers_dim[l-1])

bl : (layers_dim[l],1)

:return:parameters 字典,儲存了w b 引數

'''parameters = {} #存w,b這些引數

l = len(layers_dim) # l為神經網路的引數

for l in range(1,l):

parameters["w" + str(l)] = np.zeros(layers_dim[l],layers_dim[l-1]) # 注意parameters初始化的時候,不要用{},要用

parameters["b" + str(l)] = np.zeros(layers_dim[l],1)

return parameters

二、隨機初始化

def initialize_random(layers_dim):

'''引數:

輸入:lays_dims 列表,儲存的是每層的節點數量,layers_dim[0]是輸入x的數量,layers_dim[1]是第一層的節點數量

w1 :(layers_dim[1],layers_dim[0])

b1 : (layers_dim[1],1)

w2 : (layers_dim[2],layers_dim[1])

b2 : (layers_dim[1],1)

w3 : (layers_dim[3],layers_dim[2])

b3 : (layers_dim[3],1)

wl : (layers_dim[l],layers_dim[l-1])

bl : (layers_dim[l],1)

:return:parameters 字典,儲存了w b 引數

'''parameters = {} # 存w,b這些引數

l = len(layers_dim) # l為神經網路的引數

for l in range(1, l):

parameters["w" + str(l)] = np.random.randn((layers_dim[l], layers_dim[l - 1])) * 10# 注意parameters初始化的時候,不要用{},要用

parameters["b" + str(l)] = np.zeros(([l], 1)) #注意b還是初始化為0

return parameters

三、 梯度抑制初始化

def initialize_parameters_he(layers_dims):

'''引數:

輸入:lays_dims 列表,儲存的是每層的節點數量,layers_dim[0]是輸入x的數量,layers_dim[1]是第一層的節點數量

w1 :(layers_dim[1],layers_dim[0])

b1 : (layers_dim[1],1)

w2 : (layers_dim[2],layers_dim[1])

b2 : (layers_dim[1],1)

w3 : (layers_dim[3],layers_dim[2])

b3 : (layers_dim[3],1)

wl : (layers_dim[l],layers_dim[l-1])

bl : (layers_dim[l],1)

:return:parameters 字典,儲存了w b 引數

'''parameters = {} # 存w,b這些引數

l = len(layers_dim) # l為神經網路的引數

for l in range(1, l):

parameters["w" + str(l)] = np.random.randn((layers_dim[l], layers_dim[l - 1])) * np.sqrt(2/layers_dim[l-1]) # 注意parameters初始化的時候,不要用{},要用

parameters["b" + str(l)] = np.zeros(([l], 1)) # 注意b還是初始化為0

return parameters

初始化三種方式

陣列的初始化方式總共有三種 靜態初始化 動態初始化 預設初始化。下面針對這三種方式分別講解。1.靜態初始化 除了用new關鍵字來產生陣列以外,還可以直接在定義陣列的同時就為陣列元素分配空間並賦值。示例7 4 靜態初始化陣列 inta 靜態初始化基本型別陣列 man mans 靜態初始化引用型別陣列 ...

陣列的三種初始化方式

陣列的初始化方式總共有三種 靜態初始化 動態初始化 預設初始化。靜態初始化 除了用new關鍵字來產生陣列以外,還可以直接在定義陣列的同時就為陣列元素分配空間並賦值。eg int arr int arr new int 注意 1.new int 3 錯誤 2.int arr arr 錯誤動態初始化 陣...

C 初始化陣列的三種方式

對於一維陣列 using system using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.we...