单层感知器
1、人体神经网络
信号从树突传递进来,在细胞核进行汇总,经过轴突传递到其他的部分。从上图可以看出来,神经元是一个信息处理单元,具有多输入多输出的结构。
2、单层感知器
其中输入信号为:x1,x2,x3
权重为:w1,w2,w3
输出信号:y
偏置:b
f():sign激活函数
3、sign激活函数
当x>0时,激活函数为1,当x<0时,激活函数为-1.
图像所示如下所示:
4、感知器的学习规则
感知器学习规则实例:
感知器收敛的条件:误差小于某个预先设定的较小的值,两次迭代之间的权值变化已经很小,设定最大迭代次数,当迭代超过最大次数就停止。
5、单层感知机实例
题目:假设平面坐标系上有四个点,(3,3),(4,3)这两个点的标签为1,(1,1)(0,)这两个点的标签为-1,构建神经网络来分类,其中学习率lr=0.11,权重为[-1,1]之间的随机数。
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
#输入数据
X=np.array([[1,3,3],[1,4,3],[1,1,1],[1,0,2]])
#输入标签
Y=np.array([[1],[1],[-1],[-1]])
#权值初始化,3行1列(3个输入1个输出),取值范围-1-1
W=(np.random.random([3,1])-0.5)*2
print(W)
#学习率
lr=0.11
#神经网络的输出
O=0
def updata():
global X,Y,W,lr
O=np.sign(np.dot(X,W))#4个数据的预测值
W_C=lr*(X.T.dot(Y-O))/int(X.shape[0])#更新权值的平均值
W=W+W_C
for i in range(100):
updata()#更新权值
print(W)#打印当前的权值
print(i)#打印迭代次数
O=np.sign(np.dot(X,W))#计算当前的输出
if (O==Y).all():#如果期望输出等于实际输出,模型收敛,循环结束
print("结束")
print("迭代次数:",i)
break
#正样本
x1=[3,4]
y1=[3,3]
#负样本
x2=[1,0]
y2=[1,2]
#计算分界线的斜率以及截距
k=-W[1]/W[2]
d=-W[0]/W[2]
print('k=',k)
print('d=',d)
xdata=(0,5)
plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()
结果:
参考sign激活函数:https://blog.csdn.net/qq_36663518/article/details/107904308
参考视频:https://www.bilibili.com/video/BV1Rt411q7WJ?p=31&vd_source=166e4ef02c5e9ffa3f01c2406aec1508