单层感知器

来源:互联网 发布:java map.foreach用法 编辑:程序博客网 时间:2024/05/01 05:53

单层感知器

题目:假设平面有三个点,(3,3),(4,3)两个点的标签为1,(1,1)这个点的标签为-1.构建神经网络来分类。

思路:我们要分类的数据是2维数据,所以只需要2个输入节点,我们可以把神经元的偏置也设置为一二节点,这样我们需要3个输入节点。

输入数据有3个(1,3,3),(1,4,3),(1,1,1)
数据对应的标签为(1,1,-1)
初始化权值w1,w2,w3取-1到1的随机数
学习率(learning rate)设置为0.11
激活函数为sign函数

import numpy as npimport 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到1W=(np.random.random(3)-0.5)*2print W#学习率设置lr=0.11#计算迭代次数n=0#神经网络的输出O=0def 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_Cfor _ 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=',kprint 'd=',dxdata=np.linspace(0,5)plt.figure(1)plt.plot(xdata,xdata*k+d,'r')plt.plot(x1,y1,'bo')plt.plot(x2,y2,'yo')plt.show()