Deep learning/모델 구현

20. 변수와 함수

jwjwvison 2021. 9. 28. 23:44

이번 포스팅 부터는 밑바닥 부터 시작하는 딥러닝 3에 관한 내용들을 정리해서 올리겠다. 이 책을 통해 tensorflow나 pytorch가 어떻게 짜여져있는지 framework를 직접 구현해보면서 공부할수 있을 것 같다.

 

 먼저 사용할 변수에 대해 정의한다.

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

 앞으로 이 변수의 내용이 점점 많아질 것이다.

 

 함수의 큰 뼈대를 정의해준다.

class Function:
    def __call__(self,input):
        x=input.data
        y=self.forward(x) # 구체적인 계산은 forward 메서드에서 한다
        output=Variable(y)
        return output
    
    def forward(self,x):
        raise NotImplementedError()
        # 예외를 발생시킨다. 이렇게 해두면 Function 클래스의 forward 메서드를
        # 직접 호출한 사람에게 '이 메서드는 상속하여 구현해야 한다' 는 사실을
        # 알려줄 수 있다.

 

 이어서 Function 클래스를 상속하여 입력값을 제곱하는 클래스를 구현하겠다.

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)

print(y.data)

 3개의 함수 A,B,C를 연이어 적용했다. 여기서 중요한 점은 중간에 등장하는 4개의 변수 x,a,b,y가 모두 Variable 인스턴스라는 것이다. Function클래스의 __call__ 메서드의 입출력이 Variable 인스턴스로 통일되어 있는 덕분에 이와 같이 여러 함수를 연속하여 적용할 수 있다.

'Deep learning > 모델 구현' 카테고리의 다른 글

22. 역전파  (0) 2021.09.29
21. 수치미분  (0) 2021.09.28
19. CNN(6) - CNN 시각화하기, 대표적인 CNN  (0) 2021.04.26
18. CNN(5) - CNN 구현하기  (0) 2021.04.25
17. CNN(4) - 합성곱/풀링 계층 구현하기  (0) 2021.04.25