Python / Simple Neural Network - ANDGATE, NANDGATE, ORGATE, XORGATE

Geewon Kim·2024년 1월 17일

Python

목록 보기
3/7

신경망 코드 공부를 위한 퍼셉트론 구현

단층 퍼셉트론

AND, NAND, OR 코드

# 입력이 모두 참(1)일때 참(1) 출력
def AND_gate(x1, x2):
    # 임의의 모델
    w1 = 0.4
    w2 = 0.2
    b = -0.5

    w_sum = (w1 * x1) + (w2 * x2) + b

    if w_sum <= 0:
        return 0
    else:
        return 1


# 입력이 하나라도 거짓(0)일때 참(1) 출력
def NAND_gate(x1, x2):
    # 임의의 모델
    w1 = 0.4
    w2 = 0.2
    b = -0.5

    w_sum = (w1 * x1) + (w2 * x2) + b

    if w_sum >= 0:
        return 0
    else:
        return 1


# 입력이 하나라도 참(1)일때 참(1) 출력
def OR_gate(x1, x2):
    # 임의의 모델
    w1 = 0.5
    w2 = 0.5
    b = -0.2

    w_sum = (w1 * x1) + (w2 * x2) + b
    if w_sum <= 0:
        return 0
    else:
        return 1



# 메인함수
if __name__ == "__main__":
    print("\nAND")
    print("(0,0) = ", AND_gate(0, 0))
    print("(0,1) = ", AND_gate(0, 1))
    print("(1,0) = ", AND_gate(1, 0))
    print("(1,1) = ", AND_gate(1, 1))
    print("\nNAND")
    print("(0,0) = ", NAND_gate(0, 0))
    print("(0,1) = ", NAND_gate(0, 1))
    print("(1,0) = ", NAND_gate(1, 0))
    print("(1,1) = ", NAND_gate(1, 1))
    print("\nOR")
    print("(0,0) = ", OR_gate(0, 0))
    print("(0,1) = ", OR_gate(0, 1))
    print("(1,0) = ", OR_gate(1, 0))
    print("(1,1) = ", OR_gate(1, 1))

임의의 모델(w1, w2, b)를 설정하여 AND, NAND, OR 구현

요 w1, w2를 학습하게 하면 인공지능학습이 됨

결과

단층 퍼셉트론의 단점은 XOR 문제를 해결할 수 없다는 것

NAND와 OR를 한 결과를 AND 하면 해결

다층퍼셉트론

XOR 구현 코드

# 입력이 서로 다를때 참(1) 출력
def XOR_gate(x1, x2):
    layer1 = NAND_gate(x1, x2)
    layer2 = OR_gate(x1, x2)
    y = AND_gate(layer1, layer2)
    return y
    
if __name__ == "__main__":
    print("\nXOR")
    print("(0,0) = ", XOR_gate(0, 0))
    print("(0,1) = ", XOR_gate(0, 1))
    print("(1,0) = ", XOR_gate(1, 0))
    print("(1,1) = ", XOR_gate(1, 1))

결과

profile
내 지식의 외장하드

0개의 댓글