反向傳播演算法實現

2021-09-28 22:21:36 字數 3021 閱讀 5647

學習機器學習的過程中對梯度下降法有了一些了解,深度學習有乙個經典的反向傳播演算法,一直很想學習一下,今天讀到一本好書,裡面對於反向傳播演算法的解析很好理解。

1、基本符號介紹:

2、原始碼解析

# -*- coding: utf-8 -*-

import numpy as np

network_sizes =[3

,4,2

]#初始化該神經網路的引數

sizes = network_sizes

num_layers =

len(sizes)

biases =

[np.random.randn(h,1)

for h in sizes[1:

]]#shape [4, 2]

weights =

[np.random.randn(y, x)

for x, y in

zip(sizes[:-

1], sizes[1:

])]#shape[(4, 3), (2,4)]

defmain()

:#產生訓練的資料

training_x = np.random.rand(3)

.reshape(3,

1)training_y = np.array([0

,1])

.reshape(2,

1)print

('training data x:{}, training data y:{}\n'

.format

(training_x, training_y)

) w, b = backprop(training_x, training_y)

#進行反向傳播

print

('w:'

, w)

print

('b:'

, b)

defloss_der

(network_y, real_y)

:'''

返回損失函式的偏導數,損失函式使用 mse

l = 1/2(real_y- network_y) ^ 2 這就是原始,需要注意的細節是real_y和**結果的先後循序

delta_l = network_y - real_y #變換符號

'''return

(network_y - real_y)

defsigmoid

(z):

'''啟用函式使用 sigmoid'''

return

1.0/

(1.0

+ np.exp(z)

)def

sigmoid_der

(z):

'''sigmoid 函式的導數 derivative of sigmoid.'''

return sigmoid(z)*(

1- sigmoid(z)

)def

backprop

(x, y)

:'''

返向傳播演算法的實現

:param x:

:param y:

:return:

'''# 1) 初始化網路引數的導數 權重w的偏導和偏置b的偏導

delta_w =

[np.zeros(w.shape)

for w in weights]

delta_b =

[np.zeros(b.shape)

for b in biases]

# 2) 向前傳播 feed forward

activation = x #把輸入的資料作為第一次啟用值

activations =

[x]#儲存網路中的啟用值

zs =

#儲存網路的加權輸入值(z = wx+b)

#迴圈迭代求出每個網路層的a和z

for w, b in

zip(weights, biases)

: z = np.dot(w, activation)

+ b activation = sigmoid(z)

# 3) 返向傳播 back propagation

# bp1 計算輸出層誤差

delta_l = loss_der(activations[-1

], y)

* sigmoid(zs[-1

])# bp3 損失函式在輸出層關於權值的偏導

delta_b[-1

]= delta_l

# bp4 損失函式在輸出層關於權值的偏導

delta_w[-1

]= np.dot(delta_l, activations[-2

].transpose())

delta_l = delta_l

for l in

range(2

, num_layers)

:#bp2 計算第一層的誤差

z = zs[

-l] sp = sigmoid_der(z)

delta_l = np.dot(weights[

-l +1]

.transpose(

), delta_l)

* sp

#bp3 損失函式在1層關於偏置的偏導

delta_b[

-l]= delta_l

#bp4 損失函式在l層關於權值的偏導

delta_w[

-l]= np.dot(delta_l, activations[

-l -1]

.transpose())

return

(delta_w, delta_b)

if __name__ ==

'__main__'

: main(

)

程式執行順序:

反向傳播過程:

輸出結果樣例:

TensorFlow實現反向傳播演算法

反向傳播 bpn 演算法是神經網路中研究最多 使用最多的演算法之一,它用於將輸出層中的誤差傳播到隱藏層的神經元,然後用於更新權重。學習 bpn 演算法可以分成以下兩個過程 正向傳播 輸入被饋送到網路,訊號從輸入層通過隱藏層傳播到輸出層。在輸出層,計算誤差和損失函式。反向傳播 在反向傳播中,首先計算輸...

TensorFlow反向傳播演算法實現

tensorflow反向傳播演算法實現 反向傳播 bpn 演算法是神經網路中研究最多 使用最多的演算法之一,用於將輸出層中的誤差傳播到隱藏層的神經元,然後用於更新權重。學習 bpn 演算法可以分成以下兩個過程 正向傳播 輸入被饋送到網路,訊號從輸入層通過隱藏層傳播到輸出層。在輸出層,計算誤差和損失函...

反向傳播演算法

首先我們對數學符號做一些約定。我們首先考慮簡單的情況 前饋神經網路,如圖 所示。我們先假設任意兩層之間沒有權值共享。方向傳播演算法本質上就是梯度下降演算法,所以我們要對損失函式關於每個引數求導。設單個輸入例項 x 損失函式為 j x 那麼我們要求解 j wi 和 j bi i 1,2,n 對 j 關...