感知器

0509n1

0509n2

0509n3

0509n4

學習率

$\eta$學習率($0<\eta<1$)
學習率太大,容易造成權值調整不穩定
學習率太小,權值調整太慢,迭代次數太多

收斂條件

1 誤差小於某個預先設定的較小的值
2 兩次迭代之間的權值變化已經很小
3 設定最大迭代次數,當迭代超過最大次數就停止

題目:假設平面座標系上有三個點,(3,3),(4,3)這兩個點的標籤是1,(1,1)這個點的標籤是-1.構建神經網絡。

思路:我們要分類的數據是2維數據,所以只需要2個輸入節點,我們可以把神經元的偏置值也設置成一個節點,
這樣我們需要3個輸入節點。

輸入數據有3個(1,3,3),(1,4,3),(1,1,1)
數據對應的標籤爲(1,1,-1)
初始化權重w_0,w_1,w_3取-1到1的隨機數
學習率(learning rate)設置爲0.11
激活函數爲sign函數

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.random.random(3)-0.5)*2
print(W)
#學習率設置
lr=0.11
#計算迭代次數
n=0
#神經網絡輸出
o=0

def update():
	global X,Y,W,lr,n
	n+=1
	o=np.sign(np.dot(X,W.T))
	W_c=lr*((Y-o.T).dot(X))/int(X.shape[0])
	W=W+W_c

for _ in range(100):
	update() #更新權值
	print(W) #打印當前權值
	print(n) #打印迭代次數
	o=np.sign(np.dot(X,W.T)) #計算當前輸出
	if(o==Y.T).all(): #如果實際輸出等於期望輸出,模型收斂,循環結束
		print('Finished')
		print('epoch:',n)
		break

#正樣本
x1=[3,4]
y1=[3,3]
#負樣本
x2=[1]
y2=[1]

#計算分界線的斜率以及截距
k=-W[1]/W[2]
d=-W[0]/W[2]
print('k=',k,',d=',d)

xdata=np.linspace(0,5)
plt.plot(xdata,xdata*k+d,'r')
plt.plot(x1,y1,'bo')
plt.plot(x2,y2,'yo')
plt.show()

0509n5

注意: 單層感知器不能解決異或問題

例2 異或問題

0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
import numpy as np
import matplotlib.pyplot as plt

#輸入數據
X=np.array([[1,0,0],
	  [1,0,1],
	  [1,1,0],
	  [1,1,1]])
#標籤
Y=np.array([-1,1,1,-1])
#權值初始化,1行3列,取值範圍-1到1
W=(np.random.random(3)-0.5)*2
print(W)
#學習率設置
lr=0.11
#計算迭代次數
n=0
#神經網絡輸出
o=0

def update():
	global X,Y,W,lr,n
	n+=1
	o=np.sign(np.dot(X,W.T))
	W_c=lr*((Y-o.T).dot(X))/int(X.shape[0])
	W=W+W_c

for _ in range(100):
	update() #更新權值
	print(W) #打印當前權值
	print(n) #打印迭代次數
	o=np.sign(np.dot(X,W.T)) #計算當前輸出
	if(o==Y.T).all(): #如果實際輸出等於期望輸出,模型收斂,循環結束
		print('Finished')
		print('epoch:',n)
		break

#正樣本
x1=[0,1]
y1=[1,0]
#負樣本
x2=[0,1]
y2=[0,1]

#計算分界線的斜率以及截距
k=-W[1]/W[2]
d=-W[0]/W[2]
print('k=',k,',d=',d)

xdata=np.linspace(-0.05,1.05)
plt.plot(xdata,xdata*k+d,'r')
plt.plot(x1,y1,'bo')
plt.plot(x2,y2,'yo')
plt.show()

0509n6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章