파이썬 이것저것/파이썬 딥러닝 관련

[python] 딥러닝 퍼셉트론

agingcurve 2022. 7. 13. 23:24
반응형

https://kdc-elice.imweb.me/

 

엘리스 내일 패스, 가볍게 코딩 시작

엘리스 내일패스를 통해 파이썬, SQL을 활용한 데이터 분석부터 웹개발, R 등 핫한 개발 주제들을 쉽고 편하게 수강할 수 있습니다.

kdc-elice.imweb.me

엘리스 코딩 내일패스 인공지능 과정을 수강하고 작성

 

 

인공신경망 정의

 

딥러닝의 기본이 되는, 중심적인 개념은 인공신경망이며, Input 과 Output 사이의 안에 있는 여러가지 방법론을 표현함
Hidden layer가 인공신경망에서 가장 중요한 부분임 영감 자체는 생물학, 뉴런을 가지고 있고, activation이 되면 이를 활성화 시킴

 

인공 신경망의 특징


데이터가 들어가면 데이터의 회귀분석, 분류, 유의미한 패턴이 있다면 OUTPUT를 나타낸다. 이 중간에 있는것은 Hidden layer가 몇십개 있을 수 있다. 정확한 정의를 내리기 전, 인공신경망 특징은 데이터의 특성을 Feature들에 의해서 스스로 학습하는게 인공신경망의 특징 인공신경망은 모든 학습이 가능하다.

모델 스스로 데이터의 특성을 학습하여 지도 학습, 비지도 학습 모두 적용 가능

 

 

초기 형태의 신경망인 퍼셉트론

데이터가 들어오면 w를 추가해준다면 퍼셉트론으로 넘긴다면 각각 데이터의 x1, x2, x3,로 들어오면 각각 곱하여 더해준것을 Bias를 더하여 가중치 activation foucntion인 비선형 함수를 통해서 이를 전달한다. 이것이 퍼셉트론 하나가 하는 역할이다.

 

 

활성화 함수(activation function)


activation function이 있는 이유는 다양하다. 노이즈 제거, 분류를 더 잘하는 것, weight 값을 학습하는데 가장 좋은 w값을 데이터를 통해서 배워야 하는데, 배우는 과정에 필요한 수학이 복잡하여 이를 완화시키려고 사용하기도 한다.
해당 그림은 0보다 작으면 0으로 나타내고 크면 1이라고 나타내는 계단(step) 함수이다.

 

 

동작 예시

 

퍼셉트론 작동에 대한 예시를 구현해보자

'''
1. 신호의 총합과 외출 여부를 반환하는 
   Perceptron 함수를 완성

   Step01. Bias는 외출을 좋아하는 정도이며
           -1로 설정
   
   Step02. 입력 받은 값과 Bias 값을 이용하여 신호의
           총합을 구한다.
           
   Step03. 지시한 활성화 함수를 참고하여 외출 여부
           (0 or 1)를 반환
'''

def Perceptron(x_1,x_2,w_1,w_2):
    
    bias = -1
    
    output = (x_1 * w_1 + x_2 * w_2 + bias)
    
    y = 1 if output >0 else 0
    
    return output, y

# 값을 입력받는 함수입니다.

def input_func():
    
    # 비 오는 여부(비가 온다 : 1 / 비가 오지 않는다 : 0)
    x_1 =  int(input("x_1 : 비가 오는 여부(1 or 0)을 입력"))
    
    # 여자친구가 만나자고 하는 여부(만나자고 한다 : 1 / 만나자고 하지 않는다 : 0)
    x_2 =  int(input("x_2 : 여친이 만나자고 하는 여부(1 or 0)을 입력"))
    
    # 비를 좋아하는 정도의 값(비를 싫어한다 -5 ~ 5 비를 좋아한다)
    w_1 =  int(input("w_1 : 비를 좋아하는 정도 값(-5 ~ 5)을 입력"))
    
    # 여자친구를 좋아하는 정도의 값(여자친구를 싫어한다 -5 ~ 5 비를 좋아한다)
    w_2 =  int(input("w_2 : 여친을 좋아하는 정도 값(-5 ~ 5)을 입력"))
    
    return x_1, x_2, w_1, w_2
    
'''
2. 실행 버튼을 눌러 x1, x2, w1, w2 값을 다양하게
   입력해보고, Perceptron함수에서 반환한 신호의 총합과
   그에 따른 외출 여부를 확인
'''
    
def main():
    
    x_1, x_2, w_1, w_2 = input_func()
    
    result, go_out = Perceptron(x_1,x_2,w_1,w_2)
    
    print("\n신호의 총합 : %d" % result)
    
    if go_out > 0:
        print("외출 여부 : %d\n ==> 외출한다!" % go_out)
    else:
        print("외출 여부 : %d\n ==> 외출하지 않는다!" % go_out)
    
if __name__ == "__main__":
    main()

 

DIY 퍼셉트론을 만들어보자

'''
1. 가중치와 Bias 값을 
   임의로 설정

   Step01. 0이상 1미만의 임의의 값으로 정의된 
           4개의 가중치 값이 들어가있는 
           1차원 리스트를 정의
           
   Step02. Bias 값을 임의의 값으로 설정
'''

def main():
    
    x = [1,2,3,4]
    
    w = [0.3, 0.4, 0.1, 0.7]
    b = 2
    
    output, y = perceptron(w,x,b)
    
    print('output: ', output)
    print('y: ', y)

'''
2. 신호의 총합과 그에 따른 결과 0 또는 1을
   반환하는 함수 perceptron을 완성
   
   Step01. 입력 받은 값과 Bias 값을 이용하여
           신호의 총합을 구한다
           
   Step02. 신호의 총합이 0 이상이면 1을, 
           그렇지 않으면 0을 반환하는 활성화 
           함수를 작성
'''

def perceptron(w, x, b):
    
    # output = x[0] * w[0] + x[1] * w[1] + x[2] * w[2] + x[3] * w[3] + b
    output = sum([x_i * w_i for x_i, w_i in zip(x,w)]) + b

    y = 1 if output >=0 else 0
    
    return output, y

if __name__ == "__main__":
    main()