权重和偏置
import numpy as np
# 求x1 and x2
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
# tmp = w[0]*x[0] + w[1]*x[1] + b
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(AND(0,0), AND(0,1), AND(1,0), AND(1,1))
# 求not (x1 and x2)
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
# tmp = w[0]*x[0] + w[1]*x[1] + b
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(NAND(0,0), NAND(0,1), NAND(1,0), NAND(1,1))
# 求 x1 or x2
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.1
# tmp = w[0]*x[0] + w[1]*x[1] + b
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(OR(0,0), OR(0,1), OR(1,0), OR(1,1))
# 求 x1 xor x2
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1,x2)
y = AND(s1,s2)
return y
print(XOR(0,0), XOR(0,1), XOR(1,0), XOR(1,1))
小结
-
感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值
-
感知机将权重和偏置设定为参数
-
使用感知机可以表示与和或门等逻辑电路
-
异或门无法通过单层感知机来表示,可以使用2层感知机来表示
-
单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
-
多层感知机(理论上)可以表示计算机