0과 1 사이
[2장]퍼셉트론 구현 본문
AND, NAND, OR, XOR 게이트를 퍼셉트론으로 구현해보자.
정의에 대한 설명은 생략한다.
import numpy as np
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 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 XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
print('and')
print(AND(0, 0))
print(AND(1, 0))
print(AND(0, 1))
print(AND(1, 1))
print('\n')
print('nand')
print(NAND(0, 0))
print(NAND(1, 0))
print(NAND(0, 1))
print(NAND(1, 1))
print('\n')
print('or')
print(OR(0, 0))
print(OR(1, 0))
print(OR(0, 1))
print(OR(1, 1))
print('\n')
print('xor')
print(XOR(0, 0))
print(XOR(1, 0))
print(XOR(0, 1))
print(XOR(1, 1))
print('\n')
순서대로 and, nand, or, xor 게이트들의 출력값을 확인해볼수 있다.
그런데 궁금한 점 하나. AND, NAND, OR게이트에서 가중치와 편향은 어떻게 정의한 것일까?
그래프로 그려보자
AND 게이트를 만족하는 가중치, 편향의 범위이다.
여기서 가중치를 [x, y], 편향을 z라고 두면
z <= 0
x+z <= 0
y+z <= 0
x+y+z > 0
을 모두 만족하는 영역이 x,y,z의 영역이 된다.
'딥러닝 공부' 카테고리의 다른 글
[4장] 신경망에서의 기울기 계산 (0) | 2021.08.23 |
---|---|
[4장]손실함수, 미니배치, 기울기 구현 (0) | 2021.08.22 |
[3장]신경망 예측, 정확도 계산, 배치 처리 (0) | 2021.08.19 |
[3장]행렬 곱과 3층 신경망 구현 (0) | 2021.08.09 |
활성화 함수 (0) | 2021.08.05 |