簡單bp演算法 1

2021-10-18 19:25:35 字數 2742 閱讀 3593

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 提供了演算法實現方式,每乙個輸入樣本,利用遞迴等式,根據期望值與實際輸出值的誤差,從後向前逐步調整權重,從而實現網路的訓...