深度學習 1 4 搭建多層神經網路模型

2021-08-15 17:40:37 字數 4143 閱讀 6630

目的:搭建隱藏層多於2層的神經網路

【準備】

1.匯入相關包

import ***x

【搭建神經網路】

1.初始化引數

搭建二層神經網路模型架構:linear -> relu -> linear -> sigmoid

def initialize_parameters(n_x, n_h, n_y):

w1 = np.random.randn(n_h, n_x)*0.01

b1 = np.zeros((n_h, 1))

w2 = np.random.randn(n_y, n_h)*0.01

b2 = np.zeros((n_y, 1))

搭建多層神經網路模型架構:[linear -> relu] ××

(l-1) -> linear -> sigm

oiddef initialize_parameters_deep(layer_dims):

for l in range(1, l):

parameters['w' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1]) * 0.01

parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))

2.正向傳播

2.1正向傳播基本模型

2.1.1線性正向傳播

def linear_forward(a, w, b):

z = np.dot(w,a)+b

assert(z.shape == (w.shape[0], a.shape[1]))

cache = (a, w, b)

2.1.2啟用函式正向傳播

def linear_activation_forward(a_prev, w, b, activation):

#注:此處用到輔助函式(helper function),可直接呼叫

a,activation_cache =sigmoid(z)

a, activation_cache = relu(z)
if activation == "sigmoid":

z, linear_cache = linear_forward(a_prev, w, b)

a, activation_cache = sigmoid(z)

elif activation == "relu":

z, linear_cache = linear_forward(a_prev, w, b)

a, activation_cache = relu(z)

assert (a.shape == (w.shape[0], a_prev.shape[1]))

cache = (linear_cache, activation_cache)

2.2 l層正向傳播

def l_model_forward(x, parameters):

al, cache = linear_activation_forward(a, parameters["w"+str(l)], parameters["b"+str(l)], activation = "relu")

3.損失函式

def compute_cost(al, y):

cost = -np.sum(y*np.log(al)+(1-y)*np.log(1-al))/m

4.反向傳播

4.1 線性反向傳播

def linear_backward(dz, cache):

dw = np.dot(dz,a_prev.t)/m

db = np.sum(dz, axis=1, keepdims=true)/m

da_prev = np.dot(w.t,dz)

4.2 啟用函式反向傳播

def linear_activation_backward(da, cache, activation):

此處用到2個輔助函式,可以在程式裡直接呼叫

dz = sigmoid_backward(da, activation_cache)
dz = relu_backward(da, activation_cache)
if activation == "relu":

dz = relu_backward(da, activation_cache)

da_prev, dw, db = linear_backward(dz, linear_cache)

elif activation == "sigmoid":

dz = sigmoid_backward(da, activation_cache)

da_prev, dw, db = linear_backward(dz, linear_cache)

5.l層反向傳播

def l_model_backward(al, y, caches):

此處用到輔助函式:

dal=-(

np.divide(y

,al)-

np.divide(1

-y,1

-al))

# initializing the backpropagation

dal = - (np.divide(y, al) - np.divide(1 - y, 1 - al))

# lth layer (sigmoid -> linear) gradients. inputs: "al, y, caches". outputs: "grads["dal"], grads["dwl"], grads["dbl"]

current_cache = caches[l-1]

grads["da" + str(l)], grads["dw" + str(l)], grads["db" + str(l)] = linear_activation_backward(dal, current_cache, activation = "sigmoid")

for l in reversed(range(l-1)):

# lth layer: (relu -> linear) gradients.

# inputs: "grads["da" + str(l + 2)], caches". outputs: "grads["da" + str(l + 1)] , grads["dw" + str(l + 1)] , grads["db" + str(l + 1)] 

current_cache = caches[l]

da_prev_temp, dw_temp, db_temp = linear_activation_backward(grads["da" + str(l + 2)], current_cache, activation = "relu")

grads["da" + str(l + 1)] = da_prev_temp

grads["dw" + str(l + 1)] = dw_temp

grads["db" + str(l + 1)] = db_temp

6.引數更新

def update_parameters(parameters, grads, learning_rate):

for l in range(l):

parameters["w" + str(l+1)] = parameters["w" + str(l+1)] - learning_rate * grads["dw" + str(l+1)]

parameters["b" + str(l+1)] = parameters["b" + str(l+1)] - learning_rate * grads["db" + str(l+1)]

「深度學習」和「多層神經網路」的區別

從廣義上說深度學習的網路結構也是多層神經網路的一種。傳統意義上的多層神經網路是只有輸入層 隱藏層 輸出層。其中隱藏層的層數根據需要而定,沒有明確的理論推導來說明到底多少層合適。而深度學習中最著名的卷積神經網路cnn,在原來多層神經網路的基礎上,加入了特徵學習部分,這部分是模仿人腦對訊號處理上的分級的...

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...

神經網路簡介 多層神經網路

如上圖所示,該神經網路有三層。我們標記第一層 也就是輸入層 為a 1 第一層與第二層連線權重為w 1 然後第一層輸入與第一層權重的線性和為z 1 第一層神經元個數為n 1 並依次標記剩餘網路層。可以看出,存在 z l j i 1 n l a l i w l i,j a l w l j a l 1 f...