import numpy as np
# sigmoid function sig函式和其導數整合
def nonlin(x, deriv=false):
if (deriv == true):
return x * (1 - x) # 如果deriv為true,求導數
return 1 / (1 + np.exp(-x)) # exp()是以e為底的指數函式
x = np.array([[0.35], [0.9]]) # 輸入層
y = np.array([[0.5]]) # 輸出值
np.random.seed(1)
# 初始權重
w0 = np.array([[0.1, 0.8], [0.4, 0.6]])
w1 = np.array([[0.3, 0.9]])
print("original", w0, "\n", w1)
for j in range(100):
# forward propagation
l0 = x # 相當於文章中x0
l1 = nonlin(np.dot(w0, l0)) # 相當於文章中y1
l2 = nonlin(np.dot(w1, l1)) # 相當於文章中y2
l2_error = y - l2
error = 1 / 2.0 * (y - l2) ** 2 #1/2 *(誤差)的平方
print("error:", error)
# back propagation
l2_delta = l2_error * nonlin(l2, deriv=true) #中間層輸出的偏導
l1_error = l2_delta * w1 # 反向傳播 鏈式
l1_delta = l1_error * nonlin(l1, deriv=true) #輸入層 輸出時的偏導
print("l2_delta",l2_delta)
print("l1_error", l1_error)
print("l1_delta", l1_delta)
w1 += l2_delta * l1.t; # 修改權值
w0 += l0.t.dot(l1_delta)
print(w0, "\n", w1)
結果:
Python簡單實現BP演算法
啟用函式為relu函式 import numpy as np n 64 樣本數 d in 1000 輸入維度 h 100 隱藏層維度 d out 10 輸出維度 隨機建立一些訓練資料 x np.random.randn n,d in y np.random.randn n,d out 隨機初始權重 ...
神經網路BP演算法簡單推導
這幾天圍繞 a neural probability language model 看了一些周邊資料,如神經網路 梯度下降演算法,然後順便又延伸溫習了一下線性代數 概率論以及求導。總的來說,學到不少知識。下面是一些筆記概要。一 神經網路 神經網路我之前聽過無數次,但是沒有正兒八經研究過。形象一點來說...
BP演算法調研
bp演算法,即反向傳播方法,是用來訓練前向網路的一種普遍演算法。課本 artifitial intelligence a new synthesis,nils j.nilsson 提供了演算法實現方式,每乙個輸入樣本,利用遞迴等式,根據期望值與實際輸出值的誤差,從後向前逐步調整權重,從而實現網路的訓...