더북(TheBook)

역전파를 다음과 같이 실행합니다. 예를 들어 가중치를 업데이트하는 부분에서 최적화 함수로 모멘텀 SGD를 사용했다면, 앞에서 배운 내용을 토대로 다음과 같이 만들 수 있습니다.

# 역전파 실행
def backPropagate(self, targets):

    # 델타 출력 계산
    output_deltas = [0.0] * self.num_yo
    for k in range(self.num_yo):
        error = targets[k] - self.activation_out[k]
        # 시그모이드와 tanh 중에서 활성화 함수 선택, 미분 적용
        output_deltas[k] = tanh(self.activation_out[k], True) * error

    # 은닉 노드의 오차 함수
    hidden_deltas = [0.0] * self.num_yh
    for j in range(self.num_yh):
        error = 0.0
        for k in range(self.num_yo):
            error = error + output_deltas[k] * self.weight_out[j][k]
        # 시그모이드와 tanh 중에서 활성화 함수 선택, 미분 적용
        hidden_deltas[j] = tanh(self.activation_hidden[j], True) * error

    # 출력 가중치 업데이트
    for j in range(self.num_yh):
        for k in range(self.num_yo):
            gradient = output_deltas[k] * self.activation_hidden[j]
            v = mo * self.gradient_out[j][k] - lr * gradient
            self.weight_out[j][k] += v
            self.gradient_out[j][k] = gradient

    # 입력 가중치 업데이트
    for i in range(self.num_x):
        for j in range(self.num_yh):
            gradient = hidden_deltas[j] * self.activation_input[i]
            v = mo*self.gradient_in[i][j] - lr * gradient
            self.weight_in[i][j] += v
            self.gradient_in[i][j] = gradient

    # 오차 계산(최소 제곱법)
    error = 0.0
    for k in range(len(targets)):
        error = error + 0.5 * (targets[k] - self.activation_out[k]) ** 2
    return error
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.