퍼셉트론 및 NOR 문제의 프로그래밍 실현

의미

퍼셉트론은 2 클래스 분류의 선형 분류 모델입니다. 입력은 인스턴스의 특성 벡터이고 출력은 +1과 -1의 이진 값을 사용하는 인스턴스의 범주입니다.
f (x) = 기호 (w * x + b)

AND 게이트

AND 게이트는 두 입력이 모두 1 일 때만 1을 출력하고 다른 시간에는 0을 출력합니다.

# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt


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

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = AND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))
输入结果:
(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1

OR 게이트

1이 있으면 출력은 1이고 그렇지 않으면 0입니다.

# coding: utf-8
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

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = NAND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 1

게이트 아님

x1과 x2가 동시에 1이면 0을 출력하고 다른 시간에는 1을 출력합니다.

# coding: utf-8
import numpy as np


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

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = OR(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 1
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0

XOR 게이트

0, 차이는 1 XOR 게이트는 위에서 소개 한 퍼셉트론 모델로는 구현할 수 없으며 다층 퍼셉트론은 다음과 같이 구현됩니다.

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

추천

출처blog.csdn.net/WANGYONGZIXUE/article/details/110288159