读书笔记:异或门的Python实现 ← 斋藤康毅

单层感知机无法表示异或门,单层感知机无法分离非线性空间。这让人深感遗憾,但也无需悲观。因为,可以通过组合单层感知机来表示异或门。
也就是说,
通过叠加层(加深层),感知机能进行更加灵活的表示。
实际上,与门、或门、与非门是单层感知机,而异或门是2层感知机。

【异或门的Python实现】

import numpy as np

def NAND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([-0.5,-0.5])
    b=0.7
    tmp=np.sum(w*x)+b
    if tmp<=0:
        return 0
    else:
        return 1

def OR(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.5,0.5])
    b=-0.2
    tmp=np.sum(w*x)+b
    if tmp<=0:
        return 0
    else:
        return 1

def AND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.5,0.5])
    b=-0.7
    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

if __name__=='__main__':
    for xs in [(0,0),(1,0),(0,1),(1,1)]:
        y=XOR(xs[0],xs[1])
        print(str(xs)+" -> "+str(y))


【运行结果】

(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0



 

你可能感兴趣的:(深度学习与人工智能,Python程序设计,多层感知机,异或门)