기계학습/밑바닥딥러닝3 오독오독 씹기 8

Chapter 3. 고차 미분 계산(step 25~26)/ 계산 그래프 시각화

25. 계산그래프 시각화(1)¶ 계산 그래프를 눈으로 확인하기 계산 그래프를 시각화하면 문제가 발생했을 때 원인이 되는 부분을 파악하기 쉬워짐. 또한 더 나은 계산 방법을 발견할 수도 있고, 신경망의 구조를 제3자에게 시각적으로 전달하는 용도로도 활용할 수 있음 시각화 도구로는 Graphviz를 활용하고, 사용법을 알아봄 26. 계산그래프 시각화(2)¶ dezero/utils.py 파일 작성 In [1]: import numpy as np from dezero import Variable In [2]: def _dot_var(v, verbose=False): dot_var = '{} [label="{}", color=orange, style=filled]\n' name = ''..

Chapter 2. 자연스러운 코드로(step 23~24)/복잡한 함수 미분

23. 패키지로 정리¶ 모듈: 모듈은 파이썬 파일. 특히 다른 파이썬 프로그램에서 임포트 하여 사용하는 것을 가정하고 만들어진 파이썬 파일을 모듈이라고 함 패키지: 여러 모듈을 묶은 것. 패키지를 만들려면 디렉터리를 만들고 그 안에 모듈(파이썬 파일)을 추가함 라이브러리: 여러 패키지를 묶은 것. 그래서 하나 이상의 디렉터리로 구성됨. 때로는 패키지를 가리켜 라이브러리라고 함 23.1 파일 구성~ 23.2 코어 클래스로 옮기기¶ In [1]: import numpy as np from dezero.core_simple import Variable x = Variable(np.array(1.0)) print(x) variable(1.0) 23.3 연산자 오버로드¶ setup_variable은 Variabl..

Chapter 2. 자연스러운 코드로(step 17~19)/ 연산자 오버로드

20. 연산자 오버로드(1)¶ 이전 단계부터 Variable을 '투명한 상자'로 만드는 작업ㅇ르 시행했지만 아직 + 와 * 같은 연산자에 대응하는 작업이 남아 있음. 예컨대 Variable 인스턴스 a와 b가 있을 때 y = a*b 처럼 코딩할 수 있으면 아주 유용한데, 이렇게 확장하는 것이 이번 장의 목표 궁극적인 목표는 Variable 인스턴스를 ndarray 인스턴스처럼 '보이게' 만드는 것. 이렇게 하면 DeZero를 평범한 넘파이 코드를 작성하듯 사용할 수 있어 넘파이를 사용해본 사람들이 아주 쉽게 배울 수 있음 이제부터 +와 * 연산자를 지원하도록 Variable을 확장함. 그 첫 번째로 곱셈을 수행하는 함수를 구현함 (덧셈은 11단계에서 구현함). 20.0 지금까지의 구현¶ In [1]: i..

Chapter 2. 자연스러운 코드로(step 17~19)

17. 메모리 관리와 순환 참조¶ 성능을 개선할 수 있는 대책(기술)을 DeZero에 도입함 본격적인 시작에 앞서, 파이썬에서의 메모리 관리에 대해 알아봄 이번 단계에서 설명하는 파이썬 메모리 관리 설정은 CPython을 기준으로 함 17.0 지금까지 코드 정리¶ In [1]: import weakref import numpy as np import contextlib In [2]: import numpy as np In [3]: def as_array(x): if np.isscalar(x): return np.array(x) return x In [4]: class Variable: def __init__(self, data): if data is not None: if not isinstance(da..

Chapter 2. 자연스로운 코드로(step 16)

15. 복잡한 계산 그래프(이론)¶pass 16. 복잡한 계산 그래프(구현)¶ 이전 장(Step 15)에서 설명한 복잡한 계산 그래프에 관한 이론(노트로는 정리 안함)을 구현함 가장 먼저 순전파 시 '세대'를 설정하는 부분부터 시작 그런 다음, 역전파 시 최근 세대의 함수부터 꺼내도록 함. 이런 방식으로 복잡한 계산 그래프라도 올바른 순서로 역전파로 이루어짐 16.0 현재까지의 구현¶ In [1]: import numpy as np In [2]: def as_array(x): if np.isscalar(x): return np.array(x) return x def square(x): return Square()(x) def exp(x): return Exp()(x) def add(x0, x1): ret..

Chapter 2. 자연스러운 코드로(step 11~14)

11. 가변 길이 인수(순전파편)¶ 지금까지 우리는 함수에 입출력 변수가 하나씩인 경우만 생각함 그러나 함수에 따라 여러 변수를 입력받기도 함(반대로 출력이 여러개이기도) 이를 고려하여 DeZero가 가변 길이 입출력을 처리할 수 있도록 확장 11.0 지금까지의 구현¶ In [1]: import numpy as np In [2]: def as_array(x): if np.isscalar(x): return np.array(x) return x def square(x): return Square()(x) def exp(x): return Exp()(x) In [3]: class Variable: def __init__(self, data): if data is not None: # 해당 코드 추가 if n..

Chapter 1. Auto-grad(자동미분) step 6~9: 수동 역전파/ 역전파 자동화/ 재귀, 반복문/ 파이썬 함수 활용

In [1]: import numpy as np 6. 수동 역전파¶ 이전 단계에서 역전파의 구동원리를 설명함 이번 단계에서는 Variable과 Function 클래스를 확장하여 역전파를 이용한 미분을 구현함 6.1 Variable 클래스 추가 구현¶ 역전파에 대응하는 Variable 클래스를 구현함 이를 위해 통상값(data)과 더불어 그에 대응하는 미분값(grad)도 저장하도록 확장함 새로 추가된 코드에는 음영을 덧씌움 In [2]: class Variable: def __init__(self, data): self.data = data self.grad = None 위와 같이 새로 grad라는 인스턴스 변수를 추가함 인스턴스 변수인 data와 grad는 모두 numpy의 다차원배열(ndarray)이라..

1. Auto Gradient(자동미분): 변수/ 함수/ 수치미분/ 역전파

DeZero¶ 해당 내용의 오리지널 프레임워크 해당 내용은 DeZero를 60단계로 나누어, 조금씩 완성하도록 구성함 1.1 Variable?¶ - 상자에 데이터를 넣는 그림에서, 상자의 역할이 변수 - 상자와 데이터는 별개 - 상자에는 데이터가 들어감(대입 or 할당) - 상자 속을 들여다보면 데이터를 알 수 있음(참조) 1.2 Variable class 구현¶ - 파이썬에서는 클래스의 첫 글자 이름을 보통 대문자로 함(PEP8) - Variable 클래스가 상자가 되도록 구현 In [1]: class Variable: def __init__(self, data): self.data = data 초기화 함수 __init__에 주어진 인수를 인스턴스 변수 data에 대입함. 간단한 코드지만, 이를 통해 ..