【神经网络】单层感知器

在了解感知机之前的先知道1943年Mccilloch和Pitts所提出的M-P模型。
【神经网络】单层感知器_第1张图片
M-P模型其实就是现在的神经网络中的一个神经元,但是与之不同的点在于它没有非线性激活函数激活,也不能这么说,就是没有类似sigmoid或者tanh函数激活,而它用的仅仅是一个阈值去激活。
所以它的数学表达式为:
在这里插入图片描述
此处的f函数就是阈值函数。但是这里的权重w和偏置b都是人为设定的,并不存在学习一说,这就是M-P模型与单层感知器最大的区别。感知机中的权重w和偏置b是靠学习得来的。
接下来就是感知机学习算法的介绍。
对于误差,有一种方法是神经元的期望输出与实际输出之差,作为学习信号。
权重调整公式为:
在这里插入图片描述
其中dj为期望输出,sgn为实际输出。在这里插入图片描述为控制学习速率的超参数。后面的xi为样本变量。

上代码!

# -*- coding: UTF-8 -*-


# numpy 支持高级大量的维度数组与矩阵运算import numpy  as np
# Matplotlib 是一个 Python 的 2D绘图库import matplotlib  as mpl
import matplotlib.pyplot as plt




#定义坐标,设定6组输入数据,每组为(x0,x1,x2)  三维输入
X=np.array([[1,4,3],
            [1,5,4],
            [1,4,5],
            [1,1,1],
            [1,2,1],
            [1,3,2]]);


#设定输入向量的期待输出值    二分类  1和-1
Y=np.array([1,1,1,-1,-1,-1]);


#设定权值向量(w0,w1,w2),权值范围为-1,1 中间层为一个神经元  输入层为3个神经元 所以为3*1的矩阵
W = (np.random.random(3)-0.5)*2;


#设定学习率
lr = 0.3;#计算迭代次数
n=0;#神经网络输出
O=0;




def  update():  #更新权重
    global  X,Y,W,lr,n;
    n=n+1;
    O=np.sign(np.dot(X,W.T));
    #计算权值差
    W_Tmp = lr*((Y-O.T).dot(X));
    W = W+W_Tmp;




if __name__ == '__main__':
    for index in range (100):
        update()


        O=np.sign(np.dot(X,W.T))
        print(O)
        print(Y)
        if(O == Y).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)print('d=',d)
xdata=np.linspace(0,5)
plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.plot(x1,y1,'bo')
plt.plot(x2,y2,'yo')
plt.show()

你可能感兴趣的:(感知器,神经网络,机器学习,深度学习)