人工神经网络(三)单层感知器代码实现

篇文章,我们介绍了什么是单层感知器,这节课,我们来看看如果用代码实现一个单层感知器

实验问题:

假设平面坐标系上有三个点(3,3),(4,3)这两个坐标点的标签为 1 ,(1,1) 这个坐标的标签为-1 ,构建神经网络来分类

思路:

二维数据,需要两个数据点,将神经元偏置设置成另一个输入点,一共需要三个输入点 
输入数据:(1,3,3),(1,4,3),(1,1,1) 
数据对应标签为(1,1,-1) 
初始化权值为w0,w1,w2 为 -1 到 1 的随机数 
学习率为0.11 
激活函数:sign

最终我们确定下来的是w0,w1,w2 
那么分界线的表达式为: w0+w1*x1+w2*x2=0 
因为x2为y轴上的值,那么最终的表达式为: 
y=(-w1/w2)*x - -w0/w2

权向量和输入归纳为矩阵表达:

1

2

权值调整:

权值套用规则 
lr*(Y-O.T).dot(X)/int(X.shape[0])

(Y-O.T):是实际输出与期望输出的误差 
这样我们就可以去套用权值校验公式了

具体代码为:

#单层感知器
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到1
W = (np.random.random(3)-0.5)*2
print("W is :",W)
#学习率设置
lr = 0.11
#计算迭代次数
n = 0
#神经网络输出
O=0

def update():
    global X,Y,W,lr,n,O
    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:",W) #打印权值
    print("n",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)
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()
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

结果:

这里写图片描述

后台日志为:

这里写图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值