前面介绍过感知机算法和一些简单的 Python 实践,这些都是单层实现,感知机还可以通过叠加层来构建多层感知机。
2. 感知机算法和简单 Python 实现-CSDN博客
1. 多层感知机介绍
单层感知机只能表示线性空间,多层感知机就可以表示非线性空间。多层感知机在理论上可以表示计算机。
2. 异或门的 Python 实现
2.1 异或门真值表达
异或门即:两个输入信号,一个输出信号,当两个输入信号分别是 0 和 1 时候,输出 1,否则输出 0
输入信号 | 输出信号 y | ||
x1 | x2 | 异或门 | |
1 | 0 | 0 | 0 |
2 | 1 | 0 | 1 |
3 | 0 | 1 | 1 |
4 | 1 | 1 | 0 |
2.2 Python 实现
异或门可以认为是对一个与非门信号、一个或门信号,进行与门操作。
def AND(x1,x2):
w1,w2=0.5,0.5
w=np.array([w1,w2]) # 权重转换成 array 方便计算
x=np.array([x1,x2]) # 输入信号转换成 array 方便计算
b=-0.7 #设置偏置
tmp=np.sum(w*x)+b
if(tmp<=0):
return(0)
else:
return(1)
def NAND(x1,x2):
w1,w2 = -0.5,-0.5
w=np.array([w1,w2]) # 权重转换成 array 方便计算
x=np.array([x1,x2]) # 输入信号转换成 array 方便计算
b=0.7 #设置偏置
tmp=np.sum(w*x)+b
if(tmp<=0):
return(0)
else:
return(1)
def OR(x1,x2):
w1,w2 = 0.5,0.5
w=np.array([w1,w2]) # 权重转换成 array 方便计算,权重和 AND 不同
x=np.array([x1,x2]) # 输入信号转换成 array 方便计算
b=-0.2 #设置偏置,偏置和 AND 不同
tmp=np.sum(w*x)+b
if(tmp<=0):
return(0)
else:
return(1)
def XOR(x1,x2):
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return(y)
print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))
代码结果如下