二层感知器实现异或

用初中的线性规划问题理解

由于单层神经网络不能将异或的判定分为两类。所以需要输入层/隐藏层/输出层
二层感知器实现异或_第1张图片

实现原理

a^b=(a&-b)|(-a&b)
用两个与门和一个或门实现

需要三个神经单元
二层感知器实现异或_第2张图片
参考西瓜书:
二层感知器实现异或_第3张图片

import numpy as np

# 两层感知器实现异或

# M-P神经元
# 阈值设置:与1,1,2   或1,1,0.5    非-0.6,0,0.5
def union(w,x,b):
    """
    M-P神经元
    :param w:权重矩阵
    :param x:输入矩阵
    :param b:阈值
    :return:输入
    """
    # 输入 = w和x的向量积 - 阈值
    return step_func(np.dot(w,x)-b)

# 自己写的阶跃函数
def step_func(x):
    if x >= 0:
        return 1
    else:
        return 0

# 异或
# 实现方式:y = ( a & -b ) | ( -a & b )

def xor():

    # a & -b
    w1 = np.array([1, -1])

    # -a & b
    w2 = np.array([-1, 1])

    # ( a & -b ) | ( -a & b )
    w3 = np.array([1, 1])

    while 1 :
        a = int(input("x1=:"))
        b = int(input("x2=:"))
        # 输入
        x = np.array([a, b])
        # 隐藏层a1
        a1 = union(w1,x,0.5)
        # 隐藏层b1
        b1 = union(w2,x,0.5)
        xx = np.array([a1,b1])

        c1 = union(w3,xx,0.5)

        print("输出是:",c1)


if __name__ == "__main__":
    xor()

你可能感兴趣的:(深度学习,深度学习)