딥러닝
퍼셉트론
J.H_DA
2022. 4. 29. 13:51
퍼셉트론: 입력 값과 활성화 함수를 사용해 출력 값을 다음으로 넘기는 가장 작은 신경망 기본 단위이다.
퍼셉트론의 한계: AND, OR 게이트에 대해서는 구분이 가능하나 XOR문제 해결 하지 못하였다.
from sklearn.linear_model import Perceptron
# 샘플과 레이블이다.
X = [[0,0],[0,1],[1,0], [1,1]]
y=[0,0,0,1]
# 퍼셉트론을 생성한다. tol는 종료 조건이다.
# rnadom_state는 난수의 시드이다.
clf= Perceptron(tol=1e-3, random_state = 0)
# 학습을 수행한다.
clf.fit(X,y)
# 테스트를 수행한다.
print(clf.predict(X))
다층 퍼셉트론: 퍼셉트론의 입력층과 출력층 사이에 여러개의 은닉층을 두어 XOR문제를 해결
import numpy as np
# 가중치와 바이어스
w11 = np.array([-2,-2])
w12 = np.array([2,2])
w2 = np.array([1,1])
b1 = 3
b2 = -1
b3 = -1
# 퍼셉트론
def MLP(x, w, b):
y = np.sum(w *x) + b
if y<=0:
return 0
else:
return 1
# NAND 게이트
def NAND(x1, x2):
return MLP(np.array([x1,x2]), w11, b1)
# OR 게이트
def OR(x1, x2):
return MLP(np.array([x1,x2]), w12, b2)
# AND 게이트
def AND(x1,x2):
return MLP(np.array([x1,x2]), w2, b3)
# XOR 게이트
def XOR(x1, x2):
return AND(NAND(x1,x2), OR(x1,x2))
# x1, x2 값을 번갈아 대입해 가며 최종값 출력
if __name__ == '__main__':
for x in [(0,0), (1,0), (0,1), (1,1)]:
y = XOR(x[0], x[1])
print("입력 값: " + str(x) + "출력 값: " + str(y))
728x90