클래스 연습 겸 Logic Gate 만들기
class LogicGate:
def __init__(self, w1, w2, b):
self.w1 = w1
self.w2 = w2
self.b = b
# __call__ : 함수를 지정하지 않고 호출가능. 그러므로 하나만 설정 가능
# self.함수(x1, x2) -> self(x1, x2) 로 사용하게 됨.
def __call__(self, x1, x2):
z = self.w1 * x1 + self.w2 * x2 +self.b
if z > 0: return 1
else: return 0
class ANDGate:
def __init__(self):
self.gate = LogicGate(0.5, 0.5, -0.7)
def __call__(self, x1, x2):
return self.gate(x1, x2)
class NANDGate:
def __init__(self):
self.gate = LogicGate(-0.5, -0.5, 0.7)
def __call__(self, x1, x2):
return self.gate(x1, x2)
class ORGate:
def __init__(self):
self.gate = LogicGate(0.5, 0.5, -0.2)
def __call__(self, x1, x2):
return self.gate(x1, x2)
class NORGate:
def __init__(self):
self.gate = LogicGate(-0.5, -0.5, 0.2)
def __call__(self, x1, x2):
return self.gate(x1, x2)
class XORGate:
def __init__(self):
self.or_ = ORGate()
self.nand_ = NANDGate()
self.and_ = ANDGate()
def __call__(self, x1, x2):
p = self.or_(x1, x2)
q = self.nand_(x1, x2)
return self.and_(p, q)
class XNORGate:
def __init__(self):
self.nor_ = NORGate()
self.and_ = ANDGate()
self.or_ = ORGate()
def __call__(self, x1, x2):
p = self.nor_(x1, x2)
q = self.and_(x1, x2)
return self.or_(p, q)
if __name__ == '__main__':
# 클래스 내부에서 검증 코드 작성시 저장된 변수가 실제 사용에 영향을 줄수 있다.
# __name__ 메서드를 검증 용도로 사용 가능.
# 패키지 사용할 때 아래 코드는 실행 되지 않는다.
TT = [1, 1]
FT = [0, 1]
TF = [1, 0]
FF = [0, 0]
gate = XNORGate()
print(gate(*TT))
print(gate(*TF))
print(gate(*FT))
print(gate(*FF))
'개발 > AI' 카테고리의 다른 글
[Python] GBL : Gradient-based Learning (1) | 2023.11.13 |
---|---|
[Python] Backpropagation (1) | 2023.11.13 |
[Python] Logic Gate 함수 구현 연습 (1) | 2023.11.06 |
[AutoViz] EDA를 도와줄 시각화 툴 (1) | 2023.10.31 |
[Numpy] random.normal 정규분포 (1) | 2023.10.04 |