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

文章介绍了单层感知机的局限性,即无法表示异或门这样的非线性关系,但通过构建多层感知机(如2层感知机)可以解决这一问题。文中提供了用Python实现的NAND、OR、AND门以及基于这些门构造的XOR门的代码示例,展示了如何通过组合基本门电路实现异或功能。
摘要由CSDN通过智能技术生成

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



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值