之前介绍过神经网络中单层感知器的原理,不清楚的小伙伴可点击?神经网络-感知器进行回顾,本次来通过一个简单的小例子进行感知器的代码实现。
1
训练问题
题目:有正样本(3,3)(4,3),和负样本(1,1),根据这三个点训练可用于点分类点感知器模型。
思路:样本为两维需要两个输入节点,另将偏置项也作为节点输入,则共需要三个输入节点,因此可知我们需要的感知器是如下结构?

2
Python实现
#输入样本点及标签
X = np.array([[1,3,3],[1,4,3],[1,1,1]])
Y = np.array([1,1,-1])
#初始化权值
W = np.array(np.random.random(3))
lr = 0.15
#记录迭代次数和输出
n = 0
O = 0def update():
global X,Y,W,lr,n
n+=1
O = np.sign(np.dot(X,W.T))
deltaW = (lr*(Y-O.T).dot(X))/X.shape[0]
W = W + deltaWfor _ in range(100):
update()
O = np.sign(np.dot(X,W.T))
if(O ==Y.T).all():
print('Finished')
print('迭代次数:',n)
break
,当把x2当作y,x1当作x,就可以计算出直线的斜率与截距,从而画出直线。
#记录正负样本
x1 = [3,4]
y1 = [3,3]
x2 = [1]
y2 = [1]
#计算分界线的斜率及截距
k = -W[1]/W[2]
d = -W[0]/W[2]
xdata = np.linspace(0,5)
plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.plot(x1,y1,'b*')
plt.plot(x2,y2,'y*')
plt.show()