单层感知器的局限性--异或问题

#题目:异或运算
#0^0=0
#0^1=1
#1^0=1
#1^1=0
import numpy as np
import matplotlib.pyplot as plt
#输入数据--这里偏置定为1
X = np.array([[1,0,0],[1,0,1],[1,1,0],[1,1,1]])
#标签--期望输出
Y = np.array([-1,1,1,-1])
#权值初始化,1行3列,取-1到1的随机数
W = (np.random.random(3)-0.5)*2
print(W)
#学习率
lr = 0.11
#计算迭代次数
n = 0
#神经网络输出
o = 0

def 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))/(X.shape[0])#权值改变数,这里除掉行数求平均值,因为行数多,权值改变就会很大。
    W = W + W_C 
[ 0.4705842   0.25458019  0.71643889]
for  i 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 = [0,1]
y1 = [1,0]
#负样本
x2 = [0,1]
y2 = [0,1]

#计算分界线的斜率以及截距--W0+W1X1+W2X2=0--令X1=x,X2=y--y=-W1/W2*x-W0/W2
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)

xdata = np.linspace(-2,5)

plt.figure()
plt.plot(xdata,xdata*k+d,'r')#用红色
plt.plot(x1,y1,'bo')#用蓝色
plt.plot(x2,y2,'yo')#用黄色
plt.show()
[ 0.3605842   0.19958019  0.66143889]
1
[ 0.2505842   0.14458019  0.60643889]
2
[ 0.1405842   0.08958019  0.55143889]
3
[ 0.0305842   0.03458019  0.49643889]
4
[-0.0794158  -0.02041981  0.44143889]
5
[-0.0794158  -0.02041981  0.38643889]
6
[-0.0794158  -0.02041981  0.33143889]
7
[-0.0794158  -0.02041981  0.27643889]
8
[-0.0794158  -0.02041981  0.22143889]
9
[-0.0794158  -0.02041981  0.16643889]
10
[-0.0794158  -0.02041981  0.11143889]
11
[-0.0794158  -0.02041981  0.05643889]
12
[ 0.0305842   0.03458019  0.11143889]
13
[-0.0794158  -0.02041981  0.05643889]
14
[ 0.0305842   0.03458019  0.11143889]
15
[-0.0794158  -0.02041981  0.05643889]
16
[ 0.0305842   0.03458019  0.11143889]
17
[-0.0794158  -0.02041981  0.05643889]
18
[ 0.0305842   0.03458019  0.11143889]
19
[-0.0794158  -0.02041981  0.05643889]
20
[ 0.0305842   0.03458019  0.11143889]
21
[-0.0794158  -0.02041981  0.05643889]
22
[ 0.0305842   0.03458019  0.11143889]
23
[-0.0794158  -0.02041981  0.05643889]
24
[ 0.0305842   0.03458019  0.11143889]
25
[-0.0794158  -0.02041981  0.05643889]
26
[ 0.0305842   0.03458019  0.11143889]
27
[-0.0794158  -0.02041981  0.05643889]
28
[ 0.0305842   0.03458019  0.11143889]
29
[-0.0794158  -0.02041981  0.05643889]
30
[ 0.0305842   0.03458019  0.11143889]
31
[-0.0794158  -0.02041981  0.05643889]
32
[ 0.0305842   0.03458019  0.11143889]
33
[-0.0794158  -0.02041981  0.05643889]
34
[ 0.0305842   0.03458019  0.11143889]
35
[-0.0794158  -0.02041981  0.05643889]
36
[ 0.0305842   0.03458019  0.11143889]
37
[-0.0794158  -0.02041981  0.05643889]
38
[ 0.0305842   0.03458019  0.11143889]
39
[-0.0794158  -0.02041981  0.05643889]
40
[ 0.0305842   0.03458019  0.11143889]
41
[-0.0794158  -0.02041981  0.05643889]
42
[ 0.0305842   0.03458019  0.11143889]
43
[-0.0794158  -0.02041981  0.05643889]
44
[ 0.0305842   0.03458019  0.11143889]
45
[-0.0794158  -0.02041981  0.05643889]
46
[ 0.0305842   0.03458019  0.11143889]
47
[-0.0794158  -0.02041981  0.05643889]
48
[ 0.0305842   0.03458019  0.11143889]
49
[-0.0794158  -0.02041981  0.05643889]
50
[ 0.0305842   0.03458019  0.11143889]
51
[-0.0794158  -0.02041981  0.05643889]
52
[ 0.0305842   0.03458019  0.11143889]
53
[-0.0794158  -0.02041981  0.05643889]
54
[ 0.0305842   0.03458019  0.11143889]
55
[-0.0794158  -0.02041981  0.05643889]
56
[ 0.0305842   0.03458019  0.11143889]
57
[-0.0794158  -0.02041981  0.05643889]
58
[ 0.0305842   0.03458019  0.11143889]
59
[-0.0794158  -0.02041981  0.05643889]
60
[ 0.0305842   0.03458019  0.11143889]
61
[-0.0794158  -0.02041981  0.05643889]
62
[ 0.0305842   0.03458019  0.11143889]
63
[-0.0794158  -0.02041981  0.05643889]
64
[ 0.0305842   0.03458019  0.11143889]
65
[-0.0794158  -0.02041981  0.05643889]
66
[ 0.0305842   0.03458019  0.11143889]
67
[-0.0794158  -0.02041981  0.05643889]
68
[ 0.0305842   0.03458019  0.11143889]
69
[-0.0794158  -0.02041981  0.05643889]
70
[ 0.0305842   0.03458019  0.11143889]
71
[-0.0794158  -0.02041981  0.05643889]
72
[ 0.0305842   0.03458019  0.11143889]
73
[-0.0794158  -0.02041981  0.05643889]
74
[ 0.0305842   0.03458019  0.11143889]
75
[-0.0794158  -0.02041981  0.05643889]
76
[ 0.0305842   0.03458019  0.11143889]
77
[-0.0794158  -0.02041981  0.05643889]
78
[ 0.0305842   0.03458019  0.11143889]
79
[-0.0794158  -0.02041981  0.05643889]
80
[ 0.0305842   0.03458019  0.11143889]
81
[-0.0794158  -0.02041981  0.05643889]
82
[ 0.0305842   0.03458019  0.11143889]
83
[-0.0794158  -0.02041981  0.05643889]
84
[ 0.0305842   0.03458019  0.11143889]
85
[-0.0794158  -0.02041981  0.05643889]
86
[ 0.0305842   0.03458019  0.11143889]
87
[-0.0794158  -0.02041981  0.05643889]
88
[ 0.0305842   0.03458019  0.11143889]
89
[-0.0794158  -0.02041981  0.05643889]
90
[ 0.0305842   0.03458019  0.11143889]
91
[-0.0794158  -0.02041981  0.05643889]
92
[ 0.0305842   0.03458019  0.11143889]
93
[-0.0794158  -0.02041981  0.05643889]
94
[ 0.0305842   0.03458019  0.11143889]
95
[-0.0794158  -0.02041981  0.05643889]
96
[ 0.0305842   0.03458019  0.11143889]
97
[-0.0794158  -0.02041981  0.05643889]
98
[ 0.0305842   0.03458019  0.11143889]
99
[-0.0794158  -0.02041981  0.05643889]
100
k= 0.361803856405
d= 1.40711133845

这里写图片描述

从结果上看,单层感知器并不能解决异或问题。可以尝试执行更多次,结果还是一样,并不能找到一条直线能把蓝色的点和黄色的点分割开来。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值