目的:搭建隱藏層多於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...