Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

0과 1 사이

[2장]퍼셉트론 구현 본문

딥러닝 공부

[2장]퍼셉트론 구현

고후 2021. 8. 9. 18:30

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의 영역이 된다.

 

Comments