神經網路通過數值微分計算神經網路的權重引數的梯度(即損失函式關於權重引數的梯度)
數值微分雖然簡單,容易實現,但是計算比較耗時。
計算圖的特徵是可以通過傳遞「區域性計算結果「獲得最終結果。
可以通過正向傳播和反向傳播高效地計算各個變數的導數值。
計算圖將神經網路的計算過程通過資料的圖結構表示出來。
(「從左往右進行計算」是一種正方向上的傳播(從計算圖出發點到結束點的傳播),簡稱為正向傳播;反之,則為反向傳播。)
如果某乙個函式是由復合函式表示,則該復合函式的導數可以用構成復合函式的各個函式的導數的乘積表示。
計算圖與鏈式法則:
反向傳播區域性導數的傳遞,是基於鏈式法則的。
class mullayer:
def __init__(self):
#self.x=none
#self.y=none
self.x,self.y=none,none
def forward(self,x,y):
#self.x=x
#self.y=y
self.x,self.y=x,y
out=x*y
return out
def backward(self,dout):#dout為上游傳來的導數
dx=dout*self.y#反轉x和y
dy=dout*self.x
return dx,dy
class addlayer:
def __init__(self):
pass
def forward(self,x,y):
return x+y
def backward(self,dout):
dx=dout*1
dy=dout*1
return dx,dy
if __name__=="__main__":
tax=1.1
mul_tax_layer=mullayer()
dprice=1
print("蘋果-->正向傳播".center(50,"-"))
print("mul_tax_layer初始值:self.x-->{},self.y-->{}".format(mul_tax_layer.x,mul_tax_layer.y))
print("交稅後的**{}".format(int(price)))
print("蘋果-->反向傳播".center(50,"="))
for i in range(3):
print("\n")
######蘋果和橘子
mul_orange_layer2=mullayer()
mul_tax_layer2=mullayer()
orange=150
orange_num=3
print("蘋果和橘子-->正向傳播".center(50,"-"))
#forward
orange_price=mul_orange_layer2.forward(orange,orange_num)#2
price=mul_tax_layer2.forward(all_price,tax)#4
print("蘋果和橘子的總費用{},以及交稅後的**{}".format(all_price,int(price)))
#backward
print("蘋果和橘子-->反向傳播".center(50,"="))
dall_price,dtax=mul_tax_layer2.backward(dprice)#4
BP誤差反向傳播演算法
bp演算法通過將輸出誤差反向傳播,將誤差分配到每個權值上,利用梯度更新對所有引數進行調整以達到輸出累計誤差最小 來自andrew ng的machine learning課程 為了簡化概念,先不加上偏置單元 符號介紹 zl i 第 l 層第 i節點的誤差zl i 第 l 層第i節點的輸入值al i 第...
機器學習 誤差逆傳播演算法 反向傳播演算法
誤差逆傳播演算法 error backpropagation,bp 是神經網路中常用的傳播演算法。bp演算法不僅可以應用於多層前饋神經網路,還可以應用於其他型別的神經網路,如訓練遞迴神經網路。通常所說的 bp網路 一般是指用bp演算法訓練的多層前饋神經網路。給定訓練集 d left y x y x ...
反向誤差傳播演算法學習筆記
構建cost function的表示式的函式,其神經網路圖如下,其 1和 2已經訓練好。輸入x為5000 400的矩陣 5000個元素,400個畫素 y為5000 1的矩陣 其中有5000個結果,以1,2,3,4,5,6,7,9,10 代表0 為label a1 ones size x,1 1 x ...