본문 바로가기
반응형

AI/딥러닝 프레임워크 개발16

37~38 단계) tensor , 형상 변환 함수 ( reshape, transpose ) 텐서 지금까지는 '스칼라' 변수를 주로 사용했는데, 머신러닝 데이터는 벡터나 행렬 등의 '텐서'가 주로 사용된다. 따라서 이번 단계에서는 텐서를 사용시 주의할 점을 보면서 DeZero를 확장할 것이다. 1. 원소별 계산 add, mul, div, sin 등 함수를 구현하면서 입출력 값을 모두 스칼라로 가정하였다. 아래의 예시에서 x는 0차원의 인스턴스인 스칼라이다. import numpy as np import dezero.functions as F from dezero import Variable x = Variable(np.array(1.0)) y = F.sin(x) print(y) #variable(0.84147098) 만약 x가 행렬이라면 sin함수가 원소별로 적용될 것이다. x = Variabl.. 2021. 7. 17.
36단계) backpropagation 연결의 고차 미분 이외의 용도 지난 포스팅에서 backpropagtion 계산에서도 연결을 만들었다. 역전파의 계산 그래프는 고차 미분을 가능하게 하는 것뿐만 아니라 다른 용도로도 활용할 수 있다. 오늘은 다른 활용법에 대해 설명할 것이다. 1. double backprop의 용도 아래의 미분 계산 문제를 보면, 계산해야 하는 식에 이미 미분이 포함되어 있다. 즉, 미분이 포함된 식을 다시 미분해야 한다. 이 문제도 double backprop으로 계산할 수 있다. 먼저 이 식을 직접 계산해보면 다음과 같다. 마지막 식에 x = 2를 대입하면 100이 나온다. ※ 주의할 점은 위의 z식에서 x에 대한 y의 미분은 값이 아니라 식이다. 따라서 x = 2일 때 x에 대한 y의 값을 찾고, 그 값을 z에 대입하면 올바른 결과를 얻을 수 없.. 2021. 7. 15.
34~35단계) sin 함수 미분 , tanh 함수 미분 Add, Mul, Neg, Sub, Div, Pow 클래스를 구현하여 dezero/core.py에 추가하였다. 이번 단계에서는 DeZero함수를 추가로 구현할 것이다. 1. sin함수 sin함수와 그 미분 함수의 수식은 아래와 같다. import numpy as np from dezero.core import Function class Sin(Function): def forward(self, x): y = np.sin(x) return y def backward(self, gy): x = self.inputs gx = gy * cos(x) return gx def sin(x): return Sin()(x) backward메서드 사용 시 모든 계산은 반드시 DeZero함수를 사용해야 한다. gx = gy.. 2021. 7. 12.
33단계) 뉴턴 방법 최적화 자동화 , 2차 미분 자동 계산 이전 단계에서 고차 미분을 가능하게 DeZero를 확장시켰으므로 이번 단계에서는 실제로 2차 미분을 계산한 후, 뉴턴방법을 이용한 최적화를 해볼 것이다. 1. 2차 미분 계산하기 import numpy as np from dezero import Variable def f(x): y = x**4 - 2 * x**2 return y x = Variable(np.array(2.0)) y = f(x) #첫 번째 역전파 진행 y.backward(create_graph=True) print(x.grad) #variabe(24.0) #두 번째 역전파 진행 gx = x.grad gx.backward() print(x.grad) #variable(68.0) gx.backward()를 하여 gx.grad = None이니.. 2021. 7. 9.
728x90
반응형