본문 바로가기
IT/Python

[Python] 인공 신경 구현 실습하면서 느낀 주의점.

by dwoi 2023. 5. 3.

artificial neuron.ipynb
0.00MB


Jupyter notebook으로 class를 정의하고 각종 활성화 함수를 정의해서 넣었는데 코드를 짜면서 주의할 점 몇 가지를 정리

  1. __init__ 함수로 시작하면서 변수 선언 초기화하는 거 생각
  2. 클래스 안에 함수 정의해줄때 self 항상 까먹지 말것
  3. 클래스 호출하면서 어느 객체에서 불러왔는지 헷갈리지 말것
    • 클래스에서 함수꺼내는데 자꾸 nameerror 뜨는거 주의

#인공 신경망 클래스
class NeuralNetwork:
    def __init__(self, input_size, hidden_size, output_size):
        #가중치 초기화
        self.params = {}
        self.params['W1'] = np.random.randn(input_size, hidden_size)
        self.params['B1'] = np.random.randn(hidden_size)
        self.params['W2'] = np.random.randn(hidden_size, output_size)
        self.params['B2'] = np.random.randn(output_size)

    def forward(self, x):
        #순전파
        W1 , W2 = self.params['W1'],self.params['W2']
        B1, B2 = self.params['B1'],self.params['B2']
        h1 = np.dot(x, W1) + B1
        z1=self.relu_function(h1)
        h2 = np.dot(z1, W2) + B2
        y =self.identity_function(h2)
        
        return y

    def step_function(self, x):
        y = x > 0
        return y.astype(int)

    def sigmoid_function(self, x):
        y = 1 / (1 + np.exp(-x))
        return y

    def tanh_function(self, x):
        y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
        return y

    def relu_function(self, x):
        y = np.maximum(0, x)
        return y

    def identity_function(self, x):
        return x

    def softmax_function(self, x):
        y = np.exp(x) / np.sum(np.exp(x))
        return y

학습 절차

  1. 랜덤으로 가중치를 초기화 -위의 코드는 여기까지의 과정
  2. 초기화된 가중치를 활용하여 순전파하여 예측값 도출
  3. 비용 함수를 활용하여 실제 값과 예측 값을 비교
  4. 비용함수를 작아지도록 가중치 업데이트
  5. 비용함수가 최소하될때까지 2~4를 반복 (반복횟수 Epoch)

댓글