11 誤差反向傳播法(二) 層的實現

2021-10-08 13:12:48 字數 2585 閱讀 9858

二、啟用函式層的實現

乘法節點對應的層稱作乘法層;加法節點對應的層稱為加法層。

層的實現有2個共通的介面(或方法):

乘法層的實現

例:z =x

yz = xy

z=xy

class

mullayer

:def

__init__

(self)

: self.x =

none

self.y =

none

defforward

(self, x, y)

:#正向傳播

self.x = x

self.y = y

out = x * y

return out

defbackward

(self, dout)

:#反向傳播

dx = self.y * dout

dy = self.x * dout

return dx,dy

3個問題:

買5斤水果,每斤10元,共需多少元?

每斤多賣1元,最後需比原來多付多少錢?

多買1斤,最後需比原來多付多少錢?

這些問題很簡單,用計算圖表示如下:

買5斤水果,每斤10元,共需50元;

可以看到,每斤水果多賣1元,最後需比原來多付5元;(看藍色部分)

多買1斤,最後需比原來多付10元錢;(看藍色部分)

用上面的乘法層來計算:

mul = mullayer(

)sum

= mul.forward(10,

5)#每斤10元,買5斤

dx, dy = mul.backward(1)

print

('總共需要{}元'

.format

(sum))

print

('每斤多賣1元,最後需要多付{}元'

.format

(dx)

)print

('多買1斤,最後需要多付{}元'

.format

(dy)

)

輸出:

總共需要50元

每斤多賣1元,最後需要多付5元

多買1斤,最後需要多付10元

加法層的實現

例:z =x

+yz=x+y

z=x+

y

class

addlayer

:def

__init__

(self)

:pass

defforward

(self, x, y)

:return x + y

defbackward

(self,dout)

: dx = dout *

1 dy = dout *

1return dx, dy

relu層

回顧一下 relu 函式:

y

=x,~~~x>0\\0,~~~x≤0\end

y== \begin1,~~~x>0\\0,~~~x≤0\end

∂x∂y​=

}

y=1+e−

x1​對sigmoid函式求導,得:

∂ l∂

x=∂l

∂y∂y

∂x=∂

l∂ye

−xy2

=∂l∂

yy(1

−y)\frac = \frac\frac=\frac\frac}=\fracy(1-y)

∂x∂l​=

∂y∂l

​∂x∂

y​=∂

y∂l​

y2e−

x​=∂

y∂l​

y(1−

y)用計算圖表示為:

**如下:

class

sigmoid

:def

__init__

(self)

: self.y =

none

defforward

(self, x)

: out =1/

(1+np.exp(

-x))

self.y = out

return out

defbackward

(self,dout)

: dx = dout * self.y*(1

- self.y)

return dx

BP誤差反向傳播演算法

bp演算法通過將輸出誤差反向傳播,將誤差分配到每個權值上,利用梯度更新對所有引數進行調整以達到輸出累計誤差最小 來自andrew ng的machine learning課程 為了簡化概念,先不加上偏置單元 符號介紹 zl i 第 l 層第 i節點的誤差zl i 第 l 層第i節點的輸入值al i 第...

Day7 誤差反向傳播

神經網路通過數值微分計算神經網路的權重引數的梯度 即損失函式關於權重引數的梯度 數值微分雖然簡單,容易實現,但是計算比較耗時。計算圖的特徵是可以通過傳遞 區域性計算結果 獲得最終結果。可以通過正向傳播和反向傳播高效地計算各個變數的導數值。計算圖將神經網路的計算過程通過資料的圖結構表示出來。從左往右進...

機器學習 誤差逆傳播演算法 反向傳播演算法

誤差逆傳播演算法 error backpropagation,bp 是神經網路中常用的傳播演算法。bp演算法不僅可以應用於多層前饋神經網路,還可以應用於其他型別的神經網路,如訓練遞迴神經網路。通常所說的 bp網路 一般是指用bp演算法訓練的多層前饋神經網路。給定訓練集 d left y x y x ...