이번 포스팅 부터는 밑바닥 부터 시작하는 딥러닝 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 |