BP神經網路初學

2021-09-29 02:12:39 字數 3129 閱讀 5133

神經網路是由具有適應性的簡單單元組成的廣泛並互連的網路,其組織可以模擬生物的神經系統對真實世界物體所做出的互動反應。

目前神經網路已經是相當大,多學科交叉的學科領域。

1、人體神經網路

神經網路中最基本的組成部分是神經元模型。

可以看出如下圖的人體神經網路只有乙個神經元和一條軸突。其中乙個神經元一般擁有多個樹突,主要是用來接受傳入資訊;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經元傳遞資訊。軸突末梢跟其他神經元的樹突產生連線,從而傳遞訊號。這個連線的位置在生物學上叫做「突觸」。

2、神經元模型

如上圖可見,此神經元有三個輸入節點(x1,x2,x3)和乙個輸出節點(y),每個節點所對應的權向量分別是w1,w2,w3,其中偏置因子是b。

啟用函式有很多種,這裡使用的是一種簡單的sign函式

*f=sign(x)=      

1 x>=0

-1 x<0

y=x1 * w1+x2 * w2+x3 * w3+b*

為了方便計算,可以將 b 看成是 x0 * w0,其中x0=1,w0=b

則計算公式可簡化成

*y=f(x0 *  w0+x1 * w1+x2  * w2+x3 * w3)*

模型變為

w 的運算如下

η表示的是學習率(一般取0到1之間,若學習率太大會造成權值調整不穩定,太小會導致迭代次數太多),t 表示正確的標籤,t 和y的取值都是0或1

假設利用平面座標上的四個點來構造神經網路分類,四點分別是(3,3),(4,3)標籤為1,(1,1),(0,2)標籤為-1

則首先需要知道的是我們要分類的資料是2維的,因此需要兩個輸入節點,再爸偏置項也設定成乙個節點,所以是需要3個輸入節點。

需要輸入的資料由(1,3,3),(1,4,3),(1,1,1),(1,0,2) 。 (x0為1)

對應的標籤是(1,1,-1,-1)

權值初始化為1到-1之間的隨機數

假設學習率是0.11

啟用函式則採用sign函式

具體實現如下:

import numpy as np

import matplotlib.pyplot as plt

#資料x=np.array([[1,3,3],

[1,4,3],

[1,1,1],

[1,0,2]])

#標籤y=np.array([[1],

[1],

[-1],

[-1]])

#權值w=(np.random.random([3,1])-0.5)*2

print(w)

#學習率 learning rate

lr=0.11

#o表示f,初試值設為0

o=0#更新權值

def update():

global x,y,w,lr

o=np.sign(np.dot(x,w))

#w=η *(t-y)* x i,除以int(x.shape[0])是為了取w平均值,若需分類的資料較少,可不加,若資料較多,加上會使權值更加穩定

w_c=lr*(x.t.dot(y-o))/int(x.shape[0])

w=w+w_c

#迭代100次

for i in range(100):

update()

print(w)

print(i)

o=np.sign(np.dot(x,w))

if(o==y).all():

print('finished')

print("epoches:",i)

break

#正樣本

x1=[3,4]

y1=[3,3]

#負樣本

x2=[1,0]

y2=[1,2]

#計算分界線的斜率和截距

k=-w[1]/w[2]

d=-w[0]/w[2]

print('k=',k)

print('d=',d)

xdata=(0,5)

#畫圖plt.figure()

plt.plot(xdata,xdata*k+d,'r')

plt.scatter(x1,y1,c='b')

plt.scatter(x2,y2,c='y')

plt.show()

結果如下

學習率不同,每次分類的結果都不一樣

3、使用單層感知器異或問題

當使用單層感知器實現異或時,不能得出較好的效果,會使分類不準確,因此不建議使用。

4、線性神經網路

線性神經網路在結構上和感知器非常相似,唯一的變化則是在訓練模型時將sign函式改為purelin函式

y=x

5、delta規則

delta規則是利用利用梯度下降法的一般性的學習規則

二次代價函式為

其中誤差 e 是權向量 w 的函式,可以使用梯度下降法來最小化 e 的值

6、bp神經網路

用於解決多層神經網路的學習問題,極大的促進了神經網路的發展,其廣泛應用與分類識別,逼近,回歸,壓縮等領域。

bp神經網路分為輸入層、隱藏層和輸出層

bp演算法

BP神經網路初學習

bp神經網路初學習 根據實驗室專案需要搭建了三層前向反饋神經網路嘗試深度學習,剛開始利用matlab計算超越方程得到結果精度過低導致學習結果出現賦值,更改輸出精度後問題解決。本結構隱藏層設定了三層,每層128個神經元啟用函式為relu,利用adam演算法更新權重,誤差函式選用mse,資料處理完成後開...

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...