의미
퍼셉트론은 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