單層感知器實現邏輯與運算

2021-09-27 10:36:55 字數 3715 閱讀 7592

感知器是乙個用來做模式識別最簡單的模型,由於僅有乙個神經元,所以只能用來處理線性可分的兩類模式識別。 u=∑

i=1i

=nwi

xi+b

u = \sum_^ w_x_ + b

u=i=1∑

i=n​

wi​x

i​+b

y =s

gn(u

)y = sgn (u)

y=sgn(

u)sgn階躍函式,當u>=0時,y=1;當u<0時,y=0。

設輸入為x=,若:y=f

(w,x

,b)=

1y=f(w,x,b) =1

y=f(w,

x,b)

=1則認為x屬於類l1。若:y=f

(w,x

,b)=

0y=f(w,x,b) =0

y=f(w,

x,b)

=0則認為x屬於類l2。

分類原理就是通過一種演算法,不斷調整w、b的引數,使得對應輸入樣本滿足期望的輸出。

設輸入為x,經過神經元後得到輸出y,稱y為實際輸出或目標輸出,對於輸入x其實我們希望輸出為d,稱d為期望輸出。期望輸出與目標輸出存在誤差,用e表示。

e (n

)=y(

n)−d

(n)e(n) = y(n) - d(n)

e(n)=y

(n)−

d(n)

通過不斷的調整神經元內部引數(w,b)使得誤差e最小化,就完成了學習的過程。每次調整的量可表示為:

δ w(

n)=η

e(n)

x(n)

\delta w(n) = \eta e(n)x(n)

δw(n)=

ηe(n

)x(n)δb

(n)=

ηe(n

)\delta b(n) = \eta e(n)

δb(n)=

ηe(n

)調整後引數可表示為:

w (n

+1)=

w(n)

+δw(

n)w(n+1) = w(n)+ \delta w(n)

w(n+1)

=w(n

)+δw

(n)b(n

+1)=

b(n)

+δb(

n)b(n+1) = b(n)+\delta b(n)

b(n+1)

=b(n

)+δb

(n)邏輯與的規則為:

0 and 0 is 0

0 and 1 is 0

1 and 0 is 0

1 and 1 is 1

即當輸入x = (1,1),期望輸出為1,其餘輸入,期望輸出為0

設感知器有兩個輸入端x1和x2 ,則:

u =w

1x1+

w2x2

+bu = w_x_ + w_x_+b

u=w1​x

1​+w

2​x2

​+b實際輸出為:

y =s

gn(u

)(u>=0

,y=1

;u<0,

y=0)

y= sgn(u) (u>=0,y=1;u<0,y=0)

y=sgn(

u)(u

>=0

,y=1

;u<0,

y=0)

通過多次迭代,通過不斷的調整w1、w2、b引數,使得誤差e逐漸減小。即實際輸出不斷逼近期望值。

import numpy as np

import matplotlib.pyplot as plt

# 定義輸入資料,有4種輸入情況

x = np.array([[

0,0]

,[0,

1],[

1,0]

,[1,

1]])

# 輸出期望值

d = np.array([0

,0,0

,1])

# 初始化w、b引數,w1=0.2,w2=0.6,b=1;

w = np.array([[

0.2,

0.6]])

b =1

;# 定義學習速率

t =0.03

# 定義sgn函式

defstep

(a):

if a>0:

return

1else

:return

0# w、b更新

# dat 輸入資料

# lable 輸入對應的期望

defupdatepar

(dat,lable)

:global w,b

# 實際輸出 y = wx+b ,wx為矩陣相乘

y = step(np.dot(w,np.array(dat)

.t)+ b)

# 計算實際輸出與期望之差

e = lable - y

# 調整w、b引數

w = w + t*e*dat

b = b + t*e

# 訓練全部輸入

deftrain()

:for index in

range(4

):updatepar(x[index]

,d[index]

)# 準確度

accuracy =

# 測試

# 返回0~1之間的數,等於1時表示準確率100%

deftest()

: k =0;

for index in

range(4

):y = step(np.dot(w,np.array(x[index]

).t)

+ b)

if(y == d[index]):

k = k +

10.25

)# 訓練、測試

for index in

range(30

):train(

) test(

)# 列印最終w,b的值

print

(str

(w)+

"---"

+str

(b))

plt.rcparams[

'font.sans-serif']=

['simhei'

]plt.rcparams[

'axes.unicode_minus']=

false

plt.xlabel(

"迭代次數"

)plt.ylabel(

"準確率"

)plt.plot(accuracy)

plt.show(

)

結果:

學習筆記 感知器 單層感知器舉例

在人體神經網路中,神經細胞是有著基本處理訊號功能的基本單元,單層感知器就是人工神經網路中模擬人體神經細胞的基本單元。單層感知器 單層感知器是最簡單的神經網路,它包含輸入層和輸出層,訊號先經過線性組合器處理然後再經過啟用函式,最後輸出結果。1 輸入節點 input 輸入節點是訊號的輸入端,感知器可以有...

單層感知器python 深度學習之單層感知器(一)

當我們最初學習機器學習時候,了解到最簡單的神經網路可能便是單層感知器,他也是監督學習的最簡單一種。本文章就通過 人工神經網路理論 設計及應用 書中介紹的單層感知器一節,進行python的 實現。單層感知器的網路結構如下 上圖便是乙個單層感知器,很簡單的乙個結構,圖中說明我們有個3維的輸入值分別是x1...

單層感知器(附demo)

一 引言 感知器神經網路是一種典型的前饋神經網路,具有分層結果,資訊叢輸入層進入網路,逐層向前傳遞至輸出層。根據感知器神經元轉移函式 隱層數以及權值調整規則的不同,可以形成具有各種功能特點的神經網路 二 定義與理解 單層感知器 1958年,美國心理學家frank rosenblatt 提出一種具有單...