3 線性神經網路

2021-10-03 11:28:46 字數 2818 閱讀 9710

​ 由於單層感知器不能解決線性不可分的問題(在上篇文章對線性可分做了解釋),如異或問題,這時我們引入了新的結構:線性神經網路。

​ 線性神經網路與單層感知器的結構相似,只是它們的啟用函式不同,單層感知器的啟用函式只能輸出兩種可能值(-1 或 1),而線性神經網路的輸出可以是任何取值,其啟用函式是線性函式 y = x。

​ lms 學習規則與單層感知器的學習規則非常類似,區別就在於單層感知器的啟用函式的輸出是 sign(wt x),而 lms 的啟用函式的輸出就是 wt x 本身。

​ delta 學習規則是一種利用梯度下降法的一般性的學習規則,該規則也可以稱為連續感知器學習規則。

注:e 的梯度就是 e 的導數,在求導過程中要注意 x 是常量,w 是變數。

因為使用線性神經網路,啟用函式為 y = x,所以 f(x) 的導數是 1,所以式2.23 可化簡為

e_c = -(dj - oj) x

(因為符號不好表示,所以用 e_c 來代替等式左邊的符號)

梯度下降法

#%%

import numpy as np

import matplotlib.pyplot as plt

# 資料格式:[b = 1, x1, x2, x1 * x2, x1 * x1, x2 * x2]

x = np.array([[

1,0,

0,0,

0,0]

,[1,

0,1,

0,0,

1],[

1,1,

0,0,

1,0]

,[1,

1,1,

1,1,

1]])

y = np.array([-

1,1,

1,-1

])#權值w =

(np.random.random(6)

-0.5)*

2#學習率

l_r =

0.12

o =0

print

(w)#更新權值

defupdate()

:global x, y, w, n

n +=

1 o = np.dot(x, w.t)

w_c =

(l_r * np.dot(y - o.t, x)

)/ x.shape[0]

w += w_c

# 畫出曲線 w0 + w1*x1 + w2*x2 + w3*x1*x2 + w4*x1*x1 + w5*x2*x2 = 0

# x1 設定成 x,x2 設定成 y,其中 x 已知,所以該曲線是關於 y 的一元二次函式

defcalculate

(root, x)

: a = w[5]

b = w[2]

+ w[3]

* x

c = w[0]

+ w[1]

* x + w[4]

* x * x

if root ==1:

return

(-b + np.sqrt(b * b -

4* a * c))/

(2* a)

if root ==2:

return

(-b - np.sqrt(b * b -

4* a * c))/

(2* a)

defdraw()

:# 正樣本

x1 =[0

,1] y1 =[1

,0]# 負樣本

x2 =[0

,1] y2 =[0

,1]# 畫圖

x_data = np.linspace(-1

,2)

plt.figure(

) plt.plot(x_data, calculate(

1, x_data)

,'r'

) plt.plot(x_data, calculate(

2, x_data)

,'r'

)

plt.plot(x1, y1,

'bo'

) plt.plot(x2, y2,

'yo'

) plt.show(

)#%%

#分別畫出計算 100 次,1000 次,100000 次的圖

for _ in

range

(100):

update(

)draw(

)print

("計算結果為:"

, np.dot(x, w.t)

)for _ in

range

(1000):

update(

)draw(

)print

("計算結果為:"

, np.dot(x, w.t)

)for _ in

range

(100000):

update(

)draw(

)print

("計算結果為:"

, np.dot(x, w.t)

)

執行結果:

線性神經網路 matlab神經網路

自適應線性元件20世紀50年代末由widrow和hoff提出,主要用於線性逼近乙個函式式而進行模式聯想以及訊號濾波 模型識別和控制等。線性神經網路和感知器的區別是,感知器只能輸出兩種可能的值,而線性神經網路的輸出可以取任意值。線性神經網路採用widrow hoff學習規則,即lms least me...

線性神經網路

線性神經網路 啟用函式為y x import numpy as np import matplotlib.pyplot as plt 輸入資料 x np.array 1,3,3 1,4,3 1,1,1 標籤y np.array 1,1,1 權值初始化,1行3列,取值範圍 1到1 w np.rando...

神經網路 之 線性單元

什麼是線性單元 有什麼用 實現 線性單元和感知器的區別就是在啟用函式 感知器的 f 是階越函式 線性單元的啟用函式是線性的 所以線性模型的公式如下 感知器存在乙個問題,就是遇到線性不可分的資料時,就可能無法收斂,所以要使用乙個可導的線性函式來替代階躍函式,即線性單元,這樣就會收斂到乙個最佳的近似上。...