728x90
반응형
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 * cos(x)를 계산하기 위해서는 DeZero의 Cos클래스와 cos함수가 필요하다.
2. cos함수 구현
sin함수와 그 미분 함수의 수식은 아래와 같다.
class Cos(Function):
def forward(self, x):
y = np.cos(x)
return y
def backward(self, gy):
x = self.inputs
gx = gy * -sin(x)
return gx
def cos(x):
return Cos()(x)
3. sin함수 고차 미분
sin함수의 2차, 3차, 4차 미분을 계산해볼 것이다.
import numpy as np
from dezero import Variable
import dezero.functions as F
x = Variable(np.array(1.0))
y = F.sin(x)
y.backward(create_graph=True)
for i in range(3):
gx = x.grad
x.cleargrad()
gx.backward(create_graph=True)
print(x.grad) #n차 미분
#variable(-0.8414709848078965)
#variable(-0.5403023058681398)
#variable(0.8414709848078965)
gx = x.grad에서 미분 값을 꺼내 gx에서 역전파 한다. 다음 역전파를 하기 전에 x.cleargrad()를 호출하여 초기화한 후 미분을 반복한다. 위의 코드를 그래프로 그려보면 다음과 같다.
4. tanh 함수
이번에는 tanh함수를 추가할 것이다. tanh는 쌍곡탄젠트 또는 하이퍼볼릭 탄젠트라고 읽고 수식은 아래와 같다.
tanh함수는 입력값을 -1~1사이의 값으로 변환한다.
5. tanh 함수 미분
tanh함수의 미분은 다음의 분수 미분 공식을 이용하여 계산할 수 있다.
6. tanh함수 구현
tanh함수의 미분은 y = tanh(x) 일때, 1- y**2이므로 다음과 같이 구현할 수 있다.
class Tanh(Function):
def forward(self, x):
y = np.tanh(x)
return y
def backward(self, gy):
y = self.outputs[0]()
gx = gy * (1 - y * y)
return gx
def tanh(x):
return Tanh()(x)
728x90
반응형
'AI > 딥러닝 프레임워크 개발' 카테고리의 다른 글
37~38 단계) tensor , 형상 변환 함수 ( reshape, transpose ) (0) | 2021.07.17 |
---|---|
36단계) backpropagation 연결의 고차 미분 이외의 용도 (0) | 2021.07.15 |
33단계) 뉴턴 방법 최적화 자동화 , 2차 미분 자동 계산 (0) | 2021.07.09 |
30~32단계) 고차 미분 (0) | 2021.07.09 |
28~29단계) 경사하강법 , 뉴턴 방법 , 함수 최적화 (4) | 2021.07.03 |
댓글