엘리스 내일 패스, 가볍게 코딩 시작
엘리스 내일패스를 통해 파이썬, SQL을 활용한 데이터 분석부터 웹개발, R 등 핫한 개발 주제들을 쉽고 편하게 수강할 수 있습니다.
kdc-elice.imweb.me
엘리스 코딩 내일패스 인공지능 과정을 수강하고 작성
퍼셉트론 선형 분류기
퍼셉트론은 간단하면서도 Powerful한 성능을 낸다. 사람의 신경계를 모티브로 가져온 모델로, 퍼셉트론이라는 작은 유닛이 모여서 인공신경망을 만들고, 사람의 지능을 따라할고 하는 인공지능을 만든다.
논리 회로의 정리
일정한 논리 연산에 의해 출력을 얻는 회로를 의미
And Gate
A와 B 가 있으면 둘다 참이여야지 1이고 나머지는 0이다.
OR Gate
A와 B가 둘다 0이면 0이고 나머지는 1이다 두개다 선형분류기로 충분히 구분이 가능하다.
NAND(Not-AND) Gate
AND Gate와 정반대로 둘다 참이면 0이고 나머지는 1이다.
NOR(Not-OR) Gate
OR Gate와 정반대로 둘다 0이면 1이고 나머지는 0이다.
선형분류를 위한 퍼셉트론
Output layer의 여러개를 분류할 수 있고, 단층 퍼셉트론에 대해 구분을 할 수 있다.
Input Layer에서 Output Layer 각각의 X에 대해서 가중치가 붙고,Output으로 넘어가는게 Single Layer 퍼셉트론이다.
입력층
출력층
비 선형적인 문제
많은 데이터들이 선형으로 분류할 때, 하나의 선으로 제대로 구분 되지 않는 경우가 많음
XOR gate
XOR gate는 A와 B가 둘중 하나만 1일때 1 이고 나머진 0이 된다. 선형분류기는 기존 1개만 선을 그을 수 있지만, 1개만 그어서는 XOR gate를 구분 할 수 없다.
비 선형 적인 접근 방법의 필요성
안쪽에 있는건 1이고 밖에 있는 것은 0으로 만들어주는 것이다.
5가지의 논리연산 게이트를 구현해보자
import numpy as np
def AND_gate(x1, x2):
x = np.array([x1, x2])
weight = np.array([0.5,0.5])
bias = -0.7
y = np.matmul(x, weight) + bias
return Step_Function(y)
def OR_gate(x1, x2):
x = np.array([x1, x2])
weight = np.array([0.5,0.5])
bias = -0.3
y = np.matmul(x, weight) + bias
return Step_Function(y)
def NAND_gate(x1, x2):
x = np.array([x1, x2])
weight = np.array([-0.5 , -0.5])
bias = 0.7
y = np.matmul(x, weight) + bias
return Step_Function(y)
def NOR_gate(x1, x2):
x = np.array([x1, x2])
weight = np.array([-0.5, -0.5])
bias = 0.3
y = np.matmul(x, weight) + bias
return Step_Function(y)
def XOR_gate(x1, x2):
x = np.array([x1, x2])
weight = np.array([0.3, -0.5])
bias = 0.7
y = np.matmul(x, weight) + bias
return Step_Function(y)
def Step_Function(y):
return 1 if y >=0 else 0
def main():
# AND Gate와 OR Gate에 넣어줄 Input
array = np.array([[0,0], [0,1], [1,0], [1,1]])
# AND Gate를 만족하는지 출력하여 확인
print('AND Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ', Output: ',AND_gate(x1, x2))
# OR Gate를 만족하는지 출력하여 확인
print('\nOR Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ', Output: ',OR_gate(x1, x2))
# NAND와 NOR Gate에 넣어줄 Input
array = np.array([[0,0], [0,1], [1,0], [1,1]])
# NAND Gate를 만족하는지 출력하여 확인
print('NAND Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ' Output: ',NAND_gate(x1, x2))
# NOR Gate를 만족하는지 출력하여 확인
print('\nNOR Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ' Output: ',NOR_gate(x1, x2))
# XOR Gate에 넣어줄 Input과 그에 따른 Output
Input = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
Output = np.array([[0], [1], [1], [0]])
# XOR Gate를 만족하는지 출력하여 확인
print('XOR Gate 출력')
XOR_list = []
for x1, x2 in Input:
print('Input: ',x1, x2, ' Output: ', XOR_gate(x1, x2))
XOR_list.append(XOR_gate(x1, x2))
hit = 0
for i in range(len(Output)):
if XOR_list[i] == Output[i]:
hit += 1
acc = float(hit/4)*100
print('Accuracy: %.1lf%%' % (acc))
if __name__ == "__main__":
main()
'파이썬 이것저것 > 파이썬 딥러닝 관련' 카테고리의 다른 글
[Python] 딥러닝 모델의 학습 방법 (0) | 2022.07.14 |
---|---|
[Python] 딥러닝 다층 퍼셉트론 (0) | 2022.07.14 |
[python] 딥러닝 퍼셉트론 (0) | 2022.07.13 |
[Python Tensorflow 프로젝트] CNN을 활용하여 마스크 구분하기 프로젝트 (0) | 2022.07.10 |
[Python] 이미지 처리 (0) | 2022.07.08 |