感知机-神经网络编程(深度学习)

"""
感知机:接收多个输入信号,输出一个信号,并且多个信号是二值信号,只有0或者1两种类似的选择。
其局限性在于,它只能表示由一条直线分割的空间。(无法表示异或门)
但是可以使用两层感知机来表示异或门。
单层感知机只能表示线性空间,而多层感知机可以表示非线性空间
多层感知机在理论上可以表示计算机。


"""
import numpy as np
'''
感知机:
与门:只有当两个输入x1和x2都为1的时候,输出y才为1
x1   x2   y
0    0    0
1    0    0
0    1    0
1    1    1'''


def add(x1, x2):
    w1, w2, theta_add = 0.5, 0.5, 0.7
    tmp = x1 * w1 + x2 * w2
    if tmp < theta_add:
        return 0
    elif tmp > theta_add:
        return 1


print(add(0, 0), add(1, 0), add(0, 1), add(1, 1))
'''
与非门:只有当两个输入x1和x2都为1的时候,输出y才为0(和与门恰好相反)
x1   x2   y
0    0    1
1    0    1
0    1    1
1    1    0
'''
def add_flase(x1, x2):
    w1, w2, theta_add = 0.5, 0.5, 0.7
    tmp = x1 * w1 + x2 * w2
    if tmp < theta_add:
        return 1
    elif tmp > theta_add:
        return 0


print('')
print(add_flase(0, 0), add_flase(0, 1), add_flase(1, 0), add_flase(1, 1))
'''
或门:当两个输入x1和x2有一个或者都为1的时候,输入y为1.当x1和x2都为0的时候,输出y为0
x1   x2   y
0    0    0
1    0    1
0    1    1
1    1    1
'''


def or_gate(x1, x2):
    w1, w2, theta_add = 0.5, 0.5, 0.3
    tmp = x1 * w1 + x2 * w2
    if tmp < theta_add:
        return 0
    elif tmp > theta_add:
        return 1


print('')
print(or_gate(0, 0), or_gate(1, 0), or_gate(0, 1), or_gate(1, 1))
"""   使用numpy包来实现与门、非门、与非门   """

print('')
def Add(x1, x2):                                                                   # 与门的实现
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(x*w) + b
    if tmp <= 0:
        return 0
    else:
        return 1
print(Add(0,0),Add(0,1), Add(1,0), Add(1,1))


def NAND(x1, x2):                                                                 # 与非门,权重与偏置均与与门相反
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(x*w) + b
    if tmp <= 0:
        return 0
    else:
        return 1
print(NAND(0,0), NAND(0,1), NAND(1, 0), NAND(1,1))


def Or(x1, x2):                                                                 # 或门
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.3
    tmp = np.sum(x*w) + b
    if tmp <= 0:
        return 0
    else:
        return 1
print(Or(0,0), Or(0,1), Or(1, 0), Or(1,1))


'''   异或门的实现
   x1   x2   y
   0    0    0
   1    0    1
   0    1    1
   1    1    0
   '''
# 组合与门、与非门以及或门,形成异或门


def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = Or(x1, x2)
    y = Add(s1, s2)
    return y


print(XOR(0,0), XOR(0, 1), XOR(1, 0), XOR(1, 1))                                         # print(XOR(0,0), XOR(0, 1), XOR(1, 0), XOR(1, 1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值