반응형 DeZero4 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. 17~18단계) 메모리 관리 방식 , 순환 참조 , 메모리 절약 모드 1. 메모리 관리 방식 CPython의 메모리 관리는 두 가지 방식으로 진행된다. 참조(reference) 수를 세는 방식과 세대(generation)를 기준으로 쓸모없어진 객체를 회수하는 방식이다. 앞으로 전자를 참조 카운트로, 후자를 GC(Garbage Collection)라고 부를 것이다. 먼저 참조 카운트 방식을 살펴본 후 GC를 볼 것이다. 1) 참조 카운트 방식 모든 객체는 참조 카운트가 0인 상태로 생성된다. 다른 객체가 참조할 때마다 1씩 증가하고 객체에 대한 참조가 끊길 때마다 1씩 감소하다가 0이 되면 해당 객체는 메모리에서 삭제된다. 예를 들어, 대입 연산자를 사용하거나 함수에 인수로 전달하거나 컨테이너 타입 객체에 추가할 때 참조 카운트가 증가한다. class obj: pass de.. 2021. 6. 19. 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. 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 다음 728x90 반응형