반응형 AI/딥러닝 프레임워크 개발16 15~16단계) 복잡한 계산 그래프의 이론 및 구현 1. 복잡한 계산 그래프(이론 편) 1) 복잡한 계산 그래프 지금까지는 아래와 같은 일직선 계산 그래프에 대해 구현했다. 이제는 아래와 같이 변수와 함수가 복잡하게 연결된 그래프를 다루어볼 것이다. 현재의 DeZero는 이런 복잡한 연결의 역전파를 제대로 할 수 없다. 2) 역전파의 올바른 순서 아래 계산 그래프의 역전파 순서에 대해 생각해보자. 올바른 역전파를 계산한다면 그 순서는 아래와 같을 것이다. 2) 현재의 DeZero 역전파 순서 그러나 아래와 같이 구현되어 있는 현재 DeZero의 역전파 흐름은 올바른 순서와 다르다. class Variable: #생략 def backward(self): if self.grad is None: self.grad = np.ones_like(self.data) .. 2021. 6. 15. 11~14단계) 가변 길이 인수 대응 ( 순전파 , 역전파 ) 지금까지 입출력 변수가 하나씩인 경우만 고려해왔는데, 이번 포스팅에서는 가변 길이 입출력에 대응할 수 있도록 DeZero를 확장할 것이다. 1. 가변 길이 인수(순전파 편) 1) Function클래스 수정 class Function: def __call__(self, inputs): xs = [x.data for x in inputs] ys = self.forward(xs) outputs = [Variable(as_array(y)) for y in ys] for output in outputs: output.set_creators(self) self.inputs = inputs self.outputs = outputs return outputs def forward(self, xs): raise NotI.. 2021. 6. 15. 6~10단계) 수동 역전파 , 자동 역전파 , 재귀에서 반복문 , 간소화 , 테스트 이전 포스팅에서 다루었던 Variable과 Function 및 여러 함수 클래스를 확장하여 역전파를 이용한 미분을 구현해볼 것이다. 1. 수동 역전파 ■ Variable 클래스 class Variable: def __init__(self, data): self.data = data self.grad = None data 인스턴스와 더불어 그 data값에 대응하는 grad(미분값) 인스턴스 변수를 추가하여 Variable 클래스를 확장하였다. 여기서 grad를 None으로 초기화해두고 나중에 실제로 역전파를 하여 미분값을 계산하여 대입할 것이다. ■ Function 클래스 class Function: def __call__(self, input): x = input.data y = self.forward(.. 2021. 5. 13. 1~5단계) Variable 클래스 , Function 클래스 , 수치 미분 , 역전파 이론 1. Variable 클래스 구현 함수 __init__에 주어진 인수를 인스턴스 변수에 해당 데이터에 대입하여 다른 곳에서도 접근할 수 있도록 한다. class Variable: def __init__(self, data): self.data = data 예를 들어, import numpy as np data = np.array(1.0) x = Variable(data) print(x.data) #1.0 머신러닝 시스템은 기본 데이터 구조로 다차원 배열을 사용하며 넘파이의 다차원 배열 클래스는 numpy.ndarray이다. 배열의 차원을 확인할 때는 n.dim을 사용할 수 있다. import numpy as np x = np.array(1) print(x.dim) #0 x = np.array([1, 2,.. 2021. 5. 10. 이전 1 2 3 4 다음 728x90 반응형