본문 바로가기
Study 공부할레나

[스터디/밑시딥3] 제 1고지 미분 자동 계산_3.함수 연결

by LENA-cfg 2023. 8. 12.

3.1 Exp 함수 구현

 

numpy.exp

- 함수는 주어진 입력 배열에 대한 자연 상수 e의 지수 값을 계산

- e는 오일러의 수 또는 네이피어의 상수로 약 2.71828의 값을 가짐

- numpy.exp는 통계, 머신러닝, 딥러닝에서는 로그 변환의 역변환, 활성화 함수, 소프트맥스 함수의 계산에 사용됨

 

특징

1. 벡터화 연산: 배열의 모든 요소에 대해 동시에 지수 연산 수행할 수 있어 코드가 간결해짐

2. 브로드캐스팅: 다른 크기의 배열 간 연산이 가능하도록 크기를 자동으로 조정

 

(추가) 넘파이의 배열 지수 함수들

exp( ) : exponential 값을 구해줌

exp2( ) : 배열값으로 2를 거듭제곱해줌

expm1( ) : exp(배열값) - 1

 

# Exp 함수 구현
class Exp(Function):
	def forward(self, x):
    	return np.exp(x)

3.2 함수 연결

A = Square()
B = Exp()
C = Square()

x = Variable(np.array(0.5))
a = A(x)
b = B(a)
y = C(b)
print(y.data)

- x, a, b, y가 모두 Variable 인스턴스

- 위의 그림과 같이 여러 함수로 구성된 함수를 합성 함수라고 함 

y = C(B(A(x))) 이런 느낌인데 책에 코드에서는 이해하기 쉬우라고 a, b, y라는 변수에 넣어준듯 

 

# 전체 소스 코드 

import numpy as np

class Variable:
    def __init__(self, data):
        self.data = data


class Function:
    def __call__(self, input):
        x = input.data
        y = self.forward(x)
        output = Variable(y)
        return output

    def forward(self, x):
        raise NotImplementedError()


class Square(Function):
    def forward(self, x):
        return x ** 2


class Exp(Function):
    def forward(self, x):
        return np.exp(x)


A = Square()
B = Exp()
C = Square()

x = Variable(np.array(0.5))

a = A(x)
b = B(a)
y = C(b)

# y = C(B(A(x)))

print(y.data)

a = A(x)의 값을 뽑아내는 방식

b = B(a)의 값을 뽑아내는 방식

y= C(b)는 a = A(x)와 값만 다르고 동일한 방식으로 진행됨